From 22b9876b68a8fb6bc40d7b8c313d75dac678e116 Mon Sep 17 00:00:00 2001
From: dg2-new <dg2-new@mail.i2p>
Date: Fri, 25 Sep 2015 19:55:36 +0000
Subject: [PATCH] Rename _() for translation to _t() for Java 9 compatibility
 (ticket #1456)

---
 apps/desktopgui/bundle-messages.sh            |  10 +-
 .../i2p/desktopgui/ExternalTrayManager.java   |   4 +-
 .../i2p/desktopgui/InternalTrayManager.java   |   8 +-
 .../src/net/i2p/desktopgui/TrayManager.java   |   4 +-
 .../gui/DesktopguiConfigurationFrame.java     |   8 +-
 .../desktopgui/i18n/DesktopguiTranslator.java |   4 +-
 apps/i2psnark/java/bundle-messages.sh         |   4 +-
 .../src/org/klomp/snark/I2PSnarkUtil.java     |   2 +-
 .../src/org/klomp/snark/SnarkManager.java     | 190 +++----
 .../src/org/klomp/snark/web/FetchAndAdd.java  |  24 +-
 .../org/klomp/snark/web/I2PSnarkServlet.java  | 514 +++++++++---------
 apps/i2psnark/locale/messages_ar.po           |   2 +-
 apps/i2psnark/locale/messages_cs.po           |   2 +-
 apps/i2psnark/locale/messages_de.po           |   2 +-
 apps/i2psnark/locale/messages_en.po           |   2 +-
 apps/i2psnark/locale/messages_es.po           |   2 +-
 apps/i2psnark/locale/messages_fr.po           |   2 +-
 apps/i2psnark/locale/messages_hu.po           |   2 +-
 apps/i2psnark/locale/messages_it.po           |   2 +-
 apps/i2psnark/locale/messages_nb.po           |   2 +-
 apps/i2psnark/locale/messages_nl.po           |   2 +-
 apps/i2psnark/locale/messages_pl.po           |   2 +-
 apps/i2psnark/locale/messages_pt.po           |   2 +-
 apps/i2psnark/locale/messages_pt_bR.po        |   2 +-
 apps/i2psnark/locale/messages_ro.po           |   2 +-
 apps/i2psnark/locale/messages_ru.po           |   2 +-
 apps/i2psnark/locale/messages_sk.po           |   2 +-
 apps/i2psnark/locale/messages_sv.po           |   2 +-
 apps/i2psnark/locale/messages_vi.po           |   2 +-
 apps/i2psnark/locale/messages_zh.po           |   2 +-
 apps/i2ptunnel/java/bundle-messages-proxy.sh  |   6 +-
 apps/i2ptunnel/java/bundle-messages.sh        |   6 +-
 .../i2p/i2ptunnel/I2PTunnelHTTPClient.java    |  22 +-
 .../i2ptunnel/I2PTunnelHTTPClientBase.java    |  12 +-
 .../localServer/LocalHTTPServer.java          |  28 +-
 .../net/i2p/i2ptunnel/ui/GeneralHelper.java   |   8 +-
 .../src/net/i2p/i2ptunnel/web/EditBean.java   |  10 +-
 .../src/net/i2p/i2ptunnel/web/IndexBean.java  |  60 +-
 .../src/net/i2p/i2ptunnel/web/Messages.java   |   8 +-
 apps/i2ptunnel/jsp/editClient.jsp             | 194 +++----
 apps/i2ptunnel/jsp/editServer.jsp             | 200 +++----
 apps/i2ptunnel/jsp/index.jsp                  | 116 ++--
 apps/i2ptunnel/jsp/wizard.jsp                 | 192 +++----
 apps/ministreaming/java/bundle-messages.sh    |   4 +-
 .../client/streaming/I2PSocketException.java  |   6 +-
 .../java/bundle-messages-countries.sh         |   8 +-
 .../java/bundle-messages-news.sh              |   6 +-
 apps/routerconsole/java/bundle-messages.sh    |  10 +-
 .../router/update/ConsoleUpdateManager.java   |  32 +-
 .../router/update/DevSU3UpdateChecker.java    |   6 +-
 .../router/update/DevSU3UpdateHandler.java    |   2 +-
 .../i2p/router/update/DevSU3UpdateRunner.java |   2 +-
 .../net/i2p/router/update/NewsFetcher.java    |   8 +-
 .../router/update/PluginUpdateChecker.java    |   4 +-
 .../router/update/PluginUpdateHandler.java    |   4 +-
 .../i2p/router/update/PluginUpdateRunner.java |  84 +--
 .../router/update/UnsignedUpdateChecker.java  |   4 +-
 .../router/update/UnsignedUpdateHandler.java  |   2 +-
 .../router/update/UnsignedUpdateRunner.java   |   2 +-
 .../net/i2p/router/update/UpdateHandler.java  |   2 +-
 .../net/i2p/router/update/UpdateRunner.java   |  18 +-
 .../net/i2p/router/web/BanlistRenderer.java   |  22 +-
 .../src/net/i2p/router/web/CSSHelper.java     |   4 +-
 .../i2p/router/web/ConfigAdvancedHandler.java |  10 +-
 .../i2p/router/web/ConfigClientsHandler.java  |  94 ++--
 .../i2p/router/web/ConfigClientsHelper.java   |  66 +--
 .../net/i2p/router/web/ConfigHomeHandler.java |  22 +-
 .../i2p/router/web/ConfigKeyringHandler.java  |  20 +-
 .../i2p/router/web/ConfigLoggingHandler.java  |   4 +-
 .../i2p/router/web/ConfigLoggingHelper.java   |  12 +-
 .../net/i2p/router/web/ConfigNavHelper.java   |   2 +-
 .../net/i2p/router/web/ConfigNetHandler.java  |  68 +--
 .../net/i2p/router/web/ConfigNetHelper.java   |  12 +-
 .../net/i2p/router/web/ConfigPeerHandler.java |  28 +-
 .../i2p/router/web/ConfigReseedHandler.java   |  42 +-
 .../net/i2p/router/web/ConfigRestartBean.java |  26 +-
 .../i2p/router/web/ConfigServiceHandler.java  |  56 +-
 .../i2p/router/web/ConfigStatsHandler.java    |  10 +-
 .../net/i2p/router/web/ConfigStatsHelper.java |   4 +-
 .../i2p/router/web/ConfigSummaryHandler.java  |  48 +-
 .../i2p/router/web/ConfigTunnelsHandler.java  |   8 +-
 .../i2p/router/web/ConfigTunnelsHelper.java   |  26 +-
 .../net/i2p/router/web/ConfigUIHandler.java   |  30 +-
 .../net/i2p/router/web/ConfigUIHelper.java    |  16 +-
 .../i2p/router/web/ConfigUpdateHandler.java   |  38 +-
 .../i2p/router/web/ConfigUpdateHelper.java    |  14 +-
 .../net/i2p/router/web/EventLogHelper.java    |  28 +-
 .../src/net/i2p/router/web/FormHandler.java   |  14 +-
 .../src/net/i2p/router/web/GraphHelper.java   |  60 +-
 .../src/net/i2p/router/web/HelperBase.java    |  10 +-
 .../src/net/i2p/router/web/HomeHelper.java    |  14 +-
 .../net/i2p/router/web/JobQueueHelper.java    |  36 +-
 .../src/net/i2p/router/web/LogsHelper.java    |  16 +-
 .../java/src/net/i2p/router/web/Messages.java |   2 +-
 .../src/net/i2p/router/web/NetDbHelper.java   |   4 +-
 .../src/net/i2p/router/web/NetDbRenderer.java |  76 +--
 .../router/web/ProfileOrganizerRenderer.java  | 110 ++--
 .../net/i2p/router/web/ProfilesHelper.java    |   4 +-
 .../src/net/i2p/router/web/SearchHelper.java  |   2 +-
 .../net/i2p/router/web/StatSummarizer.java    |   4 +-
 .../net/i2p/router/web/StatsGenerator.java    |  56 +-
 .../i2p/router/web/SummaryBarRenderer.java    | 190 +++----
 .../src/net/i2p/router/web/SummaryHelper.java | 122 ++---
 .../net/i2p/router/web/SummaryRenderer.java   |  30 +-
 .../net/i2p/router/web/TunnelRenderer.java    |  60 +-
 apps/routerconsole/java/strings/Strings.java  | 100 ++--
 apps/routerconsole/jsp/config.jsp             |  32 +-
 apps/routerconsole/jsp/configadvanced.jsp     |  28 +-
 apps/routerconsole/jsp/configclients.jsp      |  98 ++--
 apps/routerconsole/jsp/confighome.jsp         |  44 +-
 apps/routerconsole/jsp/configkeyring.jsp      |  24 +-
 apps/routerconsole/jsp/configlogging.jsp      |  32 +-
 apps/routerconsole/jsp/confignet.jsp          | 240 ++++----
 apps/routerconsole/jsp/configpeer.jsp         |  28 +-
 apps/routerconsole/jsp/configreseed.jsp       |  84 +--
 apps/routerconsole/jsp/configservice.jsp      |  70 +--
 apps/routerconsole/jsp/configsidebar.jsp      |  14 +-
 apps/routerconsole/jsp/configstats.jsp        |  26 +-
 apps/routerconsole/jsp/configtunnels.jsp      |  24 +-
 apps/routerconsole/jsp/configui.jsp           |  26 +-
 apps/routerconsole/jsp/configupdate.jsp       |  44 +-
 apps/routerconsole/jsp/console.jsp            |   4 +-
 apps/routerconsole/jsp/dns.jsp                |   6 +-
 apps/routerconsole/jsp/error.jsp              |   4 +-
 apps/routerconsole/jsp/error500.jsp           |  20 +-
 apps/routerconsole/jsp/events.jsp             |   2 +-
 apps/routerconsole/jsp/graph.jsp              |   2 +-
 apps/routerconsole/jsp/graphs.jsp             |   2 +-
 apps/routerconsole/jsp/home.jsp               |  16 +-
 apps/routerconsole/jsp/i2ptunnelmgr.jsp       |   6 +-
 apps/routerconsole/jsp/jobs.jsp               |   2 +-
 apps/routerconsole/jsp/logs.jsp               |  22 +-
 apps/routerconsole/jsp/netdb.jsp              |   2 +-
 apps/routerconsole/jsp/news.jsp               |   2 +-
 apps/routerconsole/jsp/nowebapp.jsp           |   6 +-
 apps/routerconsole/jsp/peers.jsp              |   2 +-
 apps/routerconsole/jsp/profiles.jsp           |   2 +-
 apps/routerconsole/jsp/stats.jsp              |   2 +-
 apps/routerconsole/jsp/summary.jsi            |   6 +-
 apps/routerconsole/jsp/summaryajax.jsi        |   2 +-
 apps/routerconsole/jsp/summaryframe.jsp       |   6 +-
 apps/routerconsole/jsp/summarynoframe.jsi     |   2 +-
 apps/routerconsole/jsp/torrents.jsp           |   6 +-
 apps/routerconsole/jsp/tunnels.jsp            |   2 +-
 apps/routerconsole/jsp/viewprofile.jsp        |   4 +-
 apps/routerconsole/jsp/webmail.jsp            |   6 +-
 apps/routerconsole/locale/messages_ar.po      |   4 +-
 apps/routerconsole/locale/messages_cs.po      |   4 +-
 apps/routerconsole/locale/messages_da.po      |   4 +-
 apps/routerconsole/locale/messages_de.po      |   4 +-
 apps/routerconsole/locale/messages_el.po      |   4 +-
 apps/routerconsole/locale/messages_en.po      |   4 +-
 apps/routerconsole/locale/messages_es.po      |   4 +-
 apps/routerconsole/locale/messages_et.po      |   4 +-
 apps/routerconsole/locale/messages_fi.po      |   4 +-
 apps/routerconsole/locale/messages_fr.po      |   4 +-
 apps/routerconsole/locale/messages_hu.po      |   4 +-
 apps/routerconsole/locale/messages_it.po      |   4 +-
 apps/routerconsole/locale/messages_ja.po      |   4 +-
 apps/routerconsole/locale/messages_nb.po      |   4 +-
 apps/routerconsole/locale/messages_nl.po      |   4 +-
 apps/routerconsole/locale/messages_pl.po      |   4 +-
 apps/routerconsole/locale/messages_pt.po      |   4 +-
 apps/routerconsole/locale/messages_pt_BR.po   |   4 +-
 apps/routerconsole/locale/messages_ro.po      |   4 +-
 apps/routerconsole/locale/messages_ru.po      |   4 +-
 apps/routerconsole/locale/messages_sv.po      |   4 +-
 apps/routerconsole/locale/messages_tr.po      |   4 +-
 apps/routerconsole/locale/messages_uk.po      |   4 +-
 apps/routerconsole/locale/messages_vi.po      |   4 +-
 apps/routerconsole/locale/messages_zh.po      |   4 +-
 apps/susidns/src/bundle-messages.sh           |   6 +-
 .../java/src/i2p/susi/dns/AddressBean.java    |  42 +-
 .../src/i2p/susi/dns/AddressbookBean.java     |  40 +-
 .../src/java/src/i2p/susi/dns/BaseBean.java   |   6 +-
 .../src/java/src/i2p/susi/dns/ConfigBean.java |  12 +-
 .../src/java/src/i2p/susi/dns/Messages.java   |   4 +-
 .../src/i2p/susi/dns/NamingServiceBean.java   |  42 +-
 .../src/i2p/susi/dns/SubscriptionsBean.java   |  14 +-
 apps/susidns/src/jsp/addressbook.jsp          |  70 +--
 apps/susidns/src/jsp/config.jsp               |  64 +--
 apps/susidns/src/jsp/details.jsp              |  56 +-
 apps/susidns/src/jsp/index.jsp                |  44 +-
 apps/susidns/src/jsp/subscriptions.jsp        |  36 +-
 apps/susimail/bundle-messages.sh              |   4 +-
 apps/susimail/locale/messages_cs.po           |  10 +-
 apps/susimail/locale/messages_da.po           |  10 +-
 apps/susimail/locale/messages_de.po           |  10 +-
 apps/susimail/locale/messages_en.po           |  10 +-
 apps/susimail/locale/messages_es.po           |  10 +-
 apps/susimail/locale/messages_fi.po           |  10 +-
 apps/susimail/locale/messages_fr.po           |  10 +-
 apps/susimail/locale/messages_hu.po           |  10 +-
 apps/susimail/locale/messages_in.po           |  10 +-
 apps/susimail/locale/messages_it.po           |  10 +-
 apps/susimail/locale/messages_ja.po           |  10 +-
 apps/susimail/locale/messages_mg.po           |  10 +-
 apps/susimail/locale/messages_nl.po           |  10 +-
 apps/susimail/locale/messages_pl.po           |  10 +-
 apps/susimail/locale/messages_pt.po           |  10 +-
 apps/susimail/locale/messages_pt_BR.po        |  10 +-
 apps/susimail/locale/messages_ro.po           |  10 +-
 apps/susimail/locale/messages_ru.po           |  10 +-
 apps/susimail/locale/messages_sq.po           |  10 +-
 apps/susimail/locale/messages_sv.po           |  10 +-
 apps/susimail/locale/messages_uk.po           |  10 +-
 apps/susimail/locale/messages_vi.po           |  10 +-
 apps/susimail/locale/messages_zh.po           |  10 +-
 .../src/src/i2p/susi/webmail/MailPart.java    |   4 +-
 .../src/src/i2p/susi/webmail/Messages.java    |   2 +-
 .../src/src/i2p/susi/webmail/WebMail.java     | 274 +++++-----
 .../i2p/susi/webmail/pop3/POP3MailBox.java    |  16 +-
 .../src/i2p/susi/webmail/smtp/SMTPClient.java |  16 +-
 core/java/src/net/i2p/data/DataHelper.java    |   6 +-
 core/java/src/net/i2p/util/LogWriterBase.java |   4 +-
 core/java/src/net/i2p/util/Translate.java     |   2 +-
 history.txt                                   |   3 +
 router/java/src/net/i2p/router/Blocklist.java |  12 +-
 .../src/net/i2p/router/RouterVersion.java     |   2 +-
 .../i2p/router/networkdb/reseed/Reseeder.java |  24 +-
 .../transport/CommSystemFacadeImpl.java       |   4 +-
 .../i2p/router/transport/TransportImpl.java   |   4 +-
 .../router/transport/TransportManager.java    |  68 +--
 .../src/net/i2p/router/transport/UPnP.java    |  74 +--
 .../net/i2p/router/transport/UPnPManager.java |   4 +-
 .../router/transport/ntcp/NTCPTransport.java  |  36 +-
 .../router/transport/udp/UDPTransport.java    |  86 +--
 227 files changed, 2930 insertions(+), 2927 deletions(-)

diff --git a/apps/desktopgui/bundle-messages.sh b/apps/desktopgui/bundle-messages.sh
index 957199923c..997c768876 100644
--- a/apps/desktopgui/bundle-messages.sh
+++ b/apps/desktopgui/bundle-messages.sh
@@ -64,19 +64,19 @@ do
 	 	echo "Updating the $i file from the tags..."
 		# extract strings from java and jsp files, and update messages.po files
 		# translate calls must be one of the forms:
-		# _("foo")
+		# _t("foo")
 		# _x("foo")
-		# intl._("foo")
+		# intl._t("foo")
 		# intl.title("foo")
-		# handler._("foo")
-		# formhandler._("foo")
+		# handler._t("foo")
+		# formhandler._t("foo")
 		# net.i2p.router.web.Messages.getString("foo")
 		# In a jsp, you must use a helper or handler that has the context set.
 		# To start a new translation, copy the header from an old translation to the new .po file,
 		# then ant distclean updater.
 		find $JPATHS -name *.java > $TMPFILE
 		xgettext -f $TMPFILE -F -L java --from-code=UTF-8 --add-comments\
-	                 --keyword=_ --keyword=_x --keyword=intl._ --keyword=intl.title \
+	                 --keyword=_t --keyword=_x --keyword=intl._ --keyword=intl.title \
 	                 --keyword=handler._ --keyword=formhandler._ \
 	                 --keyword=net.i2p.router.web.Messages.getString \
 		         -o ${i}t
diff --git a/apps/desktopgui/src/net/i2p/desktopgui/ExternalTrayManager.java b/apps/desktopgui/src/net/i2p/desktopgui/ExternalTrayManager.java
index 6fea46fef5..2a3a16b63e 100644
--- a/apps/desktopgui/src/net/i2p/desktopgui/ExternalTrayManager.java
+++ b/apps/desktopgui/src/net/i2p/desktopgui/ExternalTrayManager.java
@@ -20,7 +20,7 @@ public class ExternalTrayManager extends TrayManager {
     @Override
     public PopupMenu getMainMenu() {
         PopupMenu popup = new PopupMenu();
-        MenuItem startItem = new MenuItem(_("Start I2P"));
+        MenuItem startItem = new MenuItem(_t("Start I2P"));
         startItem.addActionListener(new ActionListener() {
 
             @Override
@@ -35,7 +35,7 @@ public class ExternalTrayManager extends TrayManager {
                     
                     @Override
                     protected void done() {
-                        trayIcon.displayMessage(_("Starting"), _("I2P is starting!"), TrayIcon.MessageType.INFO);
+                        trayIcon.displayMessage(_t("Starting"), _t("I2P is starting!"), TrayIcon.MessageType.INFO);
                         //Hide the tray icon.
                         //We cannot stop the desktopgui program entirely,
                         //since that risks killing the I2P process as well.
diff --git a/apps/desktopgui/src/net/i2p/desktopgui/InternalTrayManager.java b/apps/desktopgui/src/net/i2p/desktopgui/InternalTrayManager.java
index e1247dde6c..1cb464308c 100644
--- a/apps/desktopgui/src/net/i2p/desktopgui/InternalTrayManager.java
+++ b/apps/desktopgui/src/net/i2p/desktopgui/InternalTrayManager.java
@@ -23,7 +23,7 @@ public class InternalTrayManager extends TrayManager {
     public PopupMenu getMainMenu() {
         PopupMenu popup = new PopupMenu();
         
-        MenuItem browserLauncher = new MenuItem(_("Launch I2P Browser"));
+        MenuItem browserLauncher = new MenuItem(_t("Launch I2P Browser"));
         browserLauncher.addActionListener(new ActionListener() {
             
             @Override
@@ -47,7 +47,7 @@ public class InternalTrayManager extends TrayManager {
                 }.execute();
             }
         });
-        MenuItem desktopguiConfigurationLauncher = new MenuItem(_("Configure desktopgui"));
+        MenuItem desktopguiConfigurationLauncher = new MenuItem(_t("Configure desktopgui"));
         desktopguiConfigurationLauncher.addActionListener(new ActionListener() {
 
             @Override
@@ -64,7 +64,7 @@ public class InternalTrayManager extends TrayManager {
             }
 
         });
-        MenuItem restartItem = new MenuItem(_("Restart I2P"));
+        MenuItem restartItem = new MenuItem(_t("Restart I2P"));
         restartItem.addActionListener(new ActionListener() {
 
             @Override
@@ -82,7 +82,7 @@ public class InternalTrayManager extends TrayManager {
             }
             
         });
-        MenuItem stopItem = new MenuItem(_("Stop I2P"));
+        MenuItem stopItem = new MenuItem(_t("Stop I2P"));
         stopItem.addActionListener(new ActionListener() {
 
             @Override
diff --git a/apps/desktopgui/src/net/i2p/desktopgui/TrayManager.java b/apps/desktopgui/src/net/i2p/desktopgui/TrayManager.java
index f124ee3f62..227050735c 100644
--- a/apps/desktopgui/src/net/i2p/desktopgui/TrayManager.java
+++ b/apps/desktopgui/src/net/i2p/desktopgui/TrayManager.java
@@ -78,7 +78,7 @@ public abstract class TrayManager {
         return image;
     }
     
-    protected static String _(String s) {
-        return DesktopguiTranslator._(s);
+    protected static String _t(String s) {
+        return DesktopguiTranslator._t(s);
     }
 }
diff --git a/apps/desktopgui/src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java b/apps/desktopgui/src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java
index 1e49f66093..a697c5779f 100644
--- a/apps/desktopgui/src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java
+++ b/apps/desktopgui/src/net/i2p/desktopgui/gui/DesktopguiConfigurationFrame.java
@@ -40,10 +40,10 @@ public class DesktopguiConfigurationFrame extends javax.swing.JFrame {
         cancelButton = new javax.swing.JButton();
 
         setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
-        setTitle(_("Tray icon configuration"));
+        setTitle(_t("Tray icon configuration"));
 
         desktopguiEnabled.setSelected(true);
-        desktopguiEnabled.setText(_("Should tray icon be enabled?"));
+        desktopguiEnabled.setText(_t("Should tray icon be enabled?"));
         desktopguiEnabled.setActionCommand("shouldDesktopguiBeEnabled");
 
         okButton.setText("OK");
@@ -98,8 +98,8 @@ public class DesktopguiConfigurationFrame extends javax.swing.JFrame {
         configureDesktopgui();
     }//GEN-LAST:event_okButtonMouseReleased
 
-    protected static String _(String s) {
-        return DesktopguiTranslator._(s);
+    protected static String _t(String s) {
+        return DesktopguiTranslator._t(s);
     }
 
     private void configureDesktopgui() {
diff --git a/apps/desktopgui/src/net/i2p/desktopgui/i18n/DesktopguiTranslator.java b/apps/desktopgui/src/net/i2p/desktopgui/i18n/DesktopguiTranslator.java
index e95cbc01f2..3778c4ad93 100644
--- a/apps/desktopgui/src/net/i2p/desktopgui/i18n/DesktopguiTranslator.java
+++ b/apps/desktopgui/src/net/i2p/desktopgui/i18n/DesktopguiTranslator.java
@@ -16,11 +16,11 @@ public class DesktopguiTranslator {
         return ctx;
     }
     
-    public static String _(String s) {
+    public static String _t(String s) {
         return Translate.getString(s, getRouterContext(), BUNDLE_NAME);
     }
 
-    public static String _(String s, Object o) {
+    public static String _t(String s, Object o) {
         return Translate.getString(s, o, getRouterContext(), BUNDLE_NAME);
     }
 }
diff --git a/apps/i2psnark/java/bundle-messages.sh b/apps/i2psnark/java/bundle-messages.sh
index 033e1195b7..9632ee9584 100755
--- a/apps/i2psnark/java/bundle-messages.sh
+++ b/apps/i2psnark/java/bundle-messages.sh
@@ -63,13 +63,13 @@ do
 	 	echo "Updating the $i file from the tags..."
 		# extract strings from java and jsp files, and update messages.po files
 		# translate calls must be one of the forms:
-		# _("foo")
+		# _t("foo")
 		# _x("foo")
 		# To start a new translation, copy the header from an old translation to the new .po file,
 		# then ant distclean poupdate.
 		find $JPATHS -name *.java > $TMPFILE
 		xgettext -f $TMPFILE -F -L java --from-code=UTF-8 --add-comments\
-	                 --keyword=_ --keyword=_x \
+	                 --keyword=_t --keyword=_x \
 		         -o ${i}t
 		if [ $? -ne 0 ]
 		then
diff --git a/apps/i2psnark/java/src/org/klomp/snark/I2PSnarkUtil.java b/apps/i2psnark/java/src/org/klomp/snark/I2PSnarkUtil.java
index 75570e04ae..e75ef301e4 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/I2PSnarkUtil.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/I2PSnarkUtil.java
@@ -660,7 +660,7 @@ public class I2PSnarkUtil {
      *    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"))
+     *    To tranlslate parameter also, use _t("foo {0} bar", _t("baz"))
      *    Do not double the single quotes in the parameter.
      *    Use autoboxing to call with ints, longs, floats, etc.
      */
diff --git a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java
index ee9aa5ccb6..bcb4fa34c2 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java
@@ -776,9 +776,9 @@ public class SnarkManager implements CompleteListener {
                     _util.setMaxUploaders(limit);
                     changed = true;
                     _config.setProperty(PROP_UPLOADERS_TOTAL, Integer.toString(limit));
-                    addMessage(_("Total uploaders limit changed to {0}", limit));
+                    addMessage(_t("Total uploaders limit changed to {0}", limit));
                 } else {
-                    addMessage(_("Minimum total uploaders limit is {0}", Snark.MIN_TOTAL_UPLOADERS));
+                    addMessage(_t("Minimum total uploaders limit is {0}", Snark.MIN_TOTAL_UPLOADERS));
                 }
             }
         }
@@ -790,9 +790,9 @@ public class SnarkManager implements CompleteListener {
                     _util.setMaxUpBW(limit);
                     changed = true;
                     _config.setProperty(PROP_UPBW_MAX, Integer.toString(limit));
-                    addMessage(_("Up BW limit changed to {0}KBps", limit));
+                    addMessage(_t("Up BW limit changed to {0}KBps", limit));
                 } else {
-                    addMessage(_("Minimum up bandwidth limit is {0}KBps", MIN_UP_BW));
+                    addMessage(_t("Minimum up bandwidth limit is {0}KBps", MIN_UP_BW));
                 }
             }
         }
@@ -804,7 +804,7 @@ public class SnarkManager implements CompleteListener {
                 	    _util.setStartupDelay(minutes);
 	                    changed = true;
         	            _config.setProperty(PROP_STARTUP_DELAY, Integer.toString(minutes));
-                	    addMessage(_("Startup delay changed to {0}", DataHelper.formatDuration2(minutes * (60L * 1000))));
+                	    addMessage(_t("Startup delay changed to {0}", DataHelper.formatDuration2(minutes * (60L * 1000))));
                 }
 	}
 
@@ -815,9 +815,9 @@ public class SnarkManager implements CompleteListener {
 	            changed = true;
 	            _config.setProperty(PROP_REFRESH_DELAY, Integer.toString(secs));
                     if (secs >= 0)
-	                addMessage(_("Refresh time changed to {0}", DataHelper.formatDuration2(secs * 1000)));
+	                addMessage(_t("Refresh time changed to {0}", DataHelper.formatDuration2(secs * 1000)));
 	            else
-	                addMessage(_("Refresh disabled"));
+	                addMessage(_t("Refresh disabled"));
 	        }
 	    } catch (NumberFormatException nfe) {}
 	}
@@ -833,7 +833,7 @@ public class SnarkManager implements CompleteListener {
                     changed = true;
                     pageSize = Integer.toString(size);
                     _config.setProperty(PROP_PAGE_SIZE, pageSize);
-                    addMessage(_("Page size changed to {0}", pageSize));
+                    addMessage(_t("Page size changed to {0}", pageSize));
                 }
             } catch (NumberFormatException nfe) {}
         }
@@ -842,18 +842,18 @@ public class SnarkManager implements CompleteListener {
             dataDir = DataHelper.stripHTML(dataDir.trim());
             File dd = new File(dataDir);
             if (!dd.isAbsolute()) {
-                addMessage(_("Data directory must be an absolute path") + ": " + dataDir);
+                addMessage(_t("Data directory must be an absolute path") + ": " + dataDir);
             } else if (!dd.exists()) {
-                addMessage(_("Data directory does not exist") + ": " + dataDir);
+                addMessage(_t("Data directory does not exist") + ": " + dataDir);
             } else if (!dd.isDirectory()) {
-                addMessage(_("Not a directory") + ": " + dataDir);
+                addMessage(_t("Not a directory") + ": " + dataDir);
             } else if (!dd.canRead()) {
-                addMessage(_("Unreadable") + ": " + dataDir);
+                addMessage(_t("Unreadable") + ": " + dataDir);
             } else {
                 changed = true;
                 interruptMonitor = true;
                 _config.setProperty(PROP_DIR, dataDir);
-                addMessage(_("Data directory changed to {0}", dataDir));
+                addMessage(_t("Data directory changed to {0}", dataDir));
             }
 
         }
@@ -908,37 +908,37 @@ public class SnarkManager implements CompleteListener {
                     p.putAll(opts);
                     _util.setI2CPConfig(i2cpHost, port, p);
                     _util.setMaxUpBW(getInt(PROP_UPBW_MAX, DEFAULT_MAX_UP_BW));
-                    addMessage(_("I2CP and tunnel changes will take effect after stopping all torrents"));
+                    addMessage(_t("I2CP and tunnel changes will take effect after stopping all torrents"));
                 } else if (!reconnect) {
                     // The usual case, the other two are if not in router context
                     _config.setProperty(PROP_I2CP_OPTS, i2cpOpts.trim());
-                    addMessage(_("I2CP options changed to {0}", i2cpOpts));
+                    addMessage(_t("I2CP options changed to {0}", i2cpOpts));
                     _util.setI2CPConfig(oldI2CPHost, oldI2CPPort, opts);
                 } else {
                     // Won't happen, I2CP host/port, are hidden in the GUI if in router context
                     if (_util.connected()) {
                         _util.disconnect();
-                        addMessage(_("Disconnecting old I2CP destination"));
+                        addMessage(_t("Disconnecting old I2CP destination"));
                     }
-                    addMessage(_("I2CP settings changed to {0}", i2cpHost + ':' + port + ' ' + i2cpOpts));
+                    addMessage(_t("I2CP settings changed to {0}", i2cpHost + ':' + port + ' ' + i2cpOpts));
                     _util.setI2CPConfig(i2cpHost, port, opts);
                     _util.setMaxUpBW(getInt(PROP_UPBW_MAX, DEFAULT_MAX_UP_BW));
                     boolean ok = _util.connect();
                     if (!ok) {
-                        addMessage(_("Unable to connect with the new settings, reverting to the old I2CP settings"));
+                        addMessage(_t("Unable to connect with the new settings, reverting to the old I2CP settings"));
                         _util.setI2CPConfig(oldI2CPHost, oldI2CPPort, oldOpts);
                         ok = _util.connect();
                         if (!ok)
-                            addMessage(_("Unable to reconnect with the old settings!"));
+                            addMessage(_t("Unable to reconnect with the old settings!"));
                     } else {
-                        addMessage(_("Reconnected on the new I2CP destination"));
+                        addMessage(_t("Reconnected on the new I2CP destination"));
                         _config.setProperty(PROP_I2CP_HOST, i2cpHost.trim());
                         _config.setProperty(PROP_I2CP_PORT, "" + port);
                         _config.setProperty(PROP_I2CP_OPTS, i2cpOpts.trim());
                         // no PeerAcceptors/I2PServerSockets to deal with, since all snarks are inactive
                         for (Snark snark : _snarks.values()) {
                             if (snark.restartAcceptor()) {
-                                addMessage(_("I2CP listener restarted for \"{0}\"", snark.getBaseName()));
+                                addMessage(_t("I2CP listener restarted for \"{0}\"", snark.getBaseName()));
                                 // this is the common ConnectionAcceptor, so we only need to do it once
                                 break;
                             }
@@ -952,44 +952,44 @@ public class SnarkManager implements CompleteListener {
             _config.setProperty(PROP_FILES_PUBLIC, Boolean.toString(filesPublic));
             _util.setFilesPublic(filesPublic);
             if (filesPublic)
-                addMessage(_("New files will be publicly readable"));
+                addMessage(_t("New files will be publicly readable"));
             else
-                addMessage(_("New files will not be publicly readable"));
+                addMessage(_t("New files will not be publicly readable"));
             changed = true;
         }
 
         if (shouldAutoStart() != autoStart) {
             _config.setProperty(PROP_AUTO_START, Boolean.toString(autoStart));
             if (autoStart)
-                addMessage(_("Enabled autostart"));
+                addMessage(_t("Enabled autostart"));
             else
-                addMessage(_("Disabled autostart"));
+                addMessage(_t("Disabled autostart"));
             changed = true;
         }
         if (_util.shouldUseOpenTrackers() != useOpenTrackers) {
             _config.setProperty(PROP_USE_OPENTRACKERS, useOpenTrackers + "");
             if (useOpenTrackers)
-                addMessage(_("Enabled open trackers - torrent restart required to take effect."));
+                addMessage(_t("Enabled open trackers - torrent restart required to take effect."));
             else
-                addMessage(_("Disabled open trackers - torrent restart required to take effect."));
+                addMessage(_t("Disabled open trackers - torrent restart required to take effect."));
             _util.setUseOpenTrackers(useOpenTrackers);
             changed = true;
         }
         if (_util.shouldUseDHT() != useDHT) {
             _config.setProperty(PROP_USE_DHT, Boolean.toString(useDHT));
             if (useDHT)
-                addMessage(_("Enabled DHT."));
+                addMessage(_t("Enabled DHT."));
             else
-                addMessage(_("Disabled DHT."));
+                addMessage(_t("Disabled DHT."));
             if (_util.connected())
-                addMessage(_("DHT change requires tunnel shutdown and reopen"));
+                addMessage(_t("DHT change requires tunnel shutdown and reopen"));
             _util.setUseDHT(useDHT);
             changed = true;
         }
         if (theme != null) {
             if(!theme.equals(_config.getProperty(PROP_THEME))) {
                 _config.setProperty(PROP_THEME, theme);
-                addMessage(_("{0} theme loaded, return to main i2psnark page to view.", theme));
+                addMessage(_t("{0} theme loaded, return to main i2psnark page to view.", theme));
                 changed = true;
             }
         }
@@ -999,7 +999,7 @@ public class SnarkManager implements CompleteListener {
                 // Data dir changed. this will stop and remove all old torrents, and add the new ones
                 _monitor.interrupt();
         } else {
-            addMessage(_("Configuration unchanged."));
+            addMessage(_t("Configuration unchanged."));
         }
     }
     
@@ -1031,7 +1031,7 @@ public class SnarkManager implements CompleteListener {
         if (ot == null)
             ot = getListConfig(PROP_OPENTRACKERS, DEFAULT_OPENTRACKERS);
         _util.setOpenTrackers(ot);
-        addMessage(_("Open Tracker list changed - torrent restart required to take effect."));
+        addMessage(_t("Open Tracker list changed - torrent restart required to take effect."));
         saveConfig();
     }
 
@@ -1041,7 +1041,7 @@ public class SnarkManager implements CompleteListener {
      */
     public void savePrivateTrackers(List<String> pt) {
         setListConfig(PROP_PRIVATETRACKERS, pt);
-        addMessage(_("Private tracker list changed - affects newly created torrents only."));
+        addMessage(_t("Private tracker list changed - affects newly created torrents only."));
         saveConfig();
     }
 
@@ -1087,7 +1087,7 @@ public class SnarkManager implements CompleteListener {
                 DataHelper.storeProps(_config, _configFile);
             }
         } catch (IOException ioe) {
-            addMessage(_("Unable to save the config to {0}", _configFile.getAbsolutePath()));
+            addMessage(_t("Unable to save the config to {0}", _configFile.getAbsolutePath()));
         }
     }
     
@@ -1168,10 +1168,10 @@ public class SnarkManager implements CompleteListener {
      */
     private void addTorrent(String filename, File baseFile, boolean dontAutoStart, File dataDir) {
         if ((!dontAutoStart) && !_util.connected()) {
-            addMessage(_("Connecting to I2P"));
+            addMessage(_t("Connecting to I2P"));
             boolean ok = _util.connect();
             if (!ok) {
-                addMessage(_("Error connecting to I2P - check your I2CP settings!"));
+                addMessage(_t("Error connecting to I2P - check your I2CP settings!"));
                 return;
             }
         }
@@ -1180,7 +1180,7 @@ public class SnarkManager implements CompleteListener {
             filename = sfile.getCanonicalPath();
         } catch (IOException ioe) {
             _log.error("Unable to add the torrent " + filename, ioe);
-            addMessage(_("Error: Could not add the torrent {0}", filename) + ": " + ioe);
+            addMessage(_t("Error: Could not add the torrent {0}", filename) + ": " + ioe);
             return;
         }
         if (dataDir == null)
@@ -1203,7 +1203,7 @@ public class SnarkManager implements CompleteListener {
                     fis = new FileInputStream(sfile);
                 } catch (IOException ioe) {
                     // catch this here so we don't try do delete it below
-                    addMessage(_("Cannot open \"{0}\"", sfile.getName()) + ": " + ioe.getMessage());
+                    addMessage(_t("Cannot open \"{0}\"", sfile.getName()) + ": " + ioe.getMessage());
                     return;
                 }
 
@@ -1222,21 +1222,21 @@ public class SnarkManager implements CompleteListener {
                     Snark snark = getTorrentByInfoHash(info.getInfoHash());
                     if (snark != null) {
                         // TODO - if the existing one is a magnet, delete it and add the metainfo instead?
-                        addMessage(_("Torrent with this info hash is already running: {0}", snark.getBaseName()));
+                        addMessage(_t("Torrent with this info hash is already running: {0}", snark.getBaseName()));
                         return;
                     }
 
                     if (!TrackerClient.isValidAnnounce(info.getAnnounce())) {
                         if (info.isPrivate()) {
-                            addMessage(_("ERROR - No I2P trackers in private torrent \"{0}\"", info.getName()));
+                            addMessage(_t("ERROR - No I2P trackers in private torrent \"{0}\"", info.getName()));
                         } else if (!_util.getOpenTrackers().isEmpty()) {
-                            addMessage(_("Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and DHT only.", info.getName()));
-                            //addMessage(_("Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers only.", info.getName()));
+                            addMessage(_t("Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and DHT only.", info.getName()));
+                            //addMessage(_t("Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers only.", info.getName()));
                         } else if (_util.shouldUseDHT()) {
-                            addMessage(_("Warning - No I2P trackers in \"{0}\", and open trackers are disabled, will announce to DHT only.", info.getName()));
+                            addMessage(_t("Warning - No I2P trackers in \"{0}\", and open trackers are disabled, will announce to DHT only.", info.getName()));
                         } else {
-                            addMessage(_("Warning - No I2P trackers in \"{0}\", and DHT and open trackers are disabled, you should enable open trackers or DHT before starting the torrent.", info.getName()));
-                            //addMessage(_("Warning - No I2P Trackers found in \"{0}\". Make sure Open Tracker is enabled before starting this torrent.", info.getName()));
+                            addMessage(_t("Warning - No I2P trackers in \"{0}\", and DHT and open trackers are disabled, you should enable open trackers or DHT before starting the torrent.", info.getName()));
+                            //addMessage(_t("Warning - No I2P Trackers found in \"{0}\". Make sure Open Tracker is enabled before starting this torrent.", info.getName()));
                             dontAutoStart = true;
                         }
                     }
@@ -1261,20 +1261,20 @@ public class SnarkManager implements CompleteListener {
                 } catch (IOException ioe) {
                     // close before rename/delete for windows
                     if (fis != null) try { fis.close(); fis = null; } catch (IOException ioe2) {}
-                    String err = _("Torrent in \"{0}\" is invalid", sfile.toString()) + ": " + ioe.getMessage();
+                    String err = _t("Torrent in \"{0}\" is invalid", sfile.toString()) + ": " + ioe.getMessage();
                     addMessage(err);
                     _log.error(err, ioe);
                     File rename = new File(filename + ".BAD");
                     if (rename.exists()) {
                         if (sfile.delete())
-                            addMessage(_("Torrent file deleted: {0}", sfile.toString()));
+                            addMessage(_t("Torrent file deleted: {0}", sfile.toString()));
                     } else {
                         if (FileUtil.rename(sfile, rename))
-                            addMessage(_("Torrent file moved from {0} to {1}", sfile.toString(), rename.toString()));
+                            addMessage(_t("Torrent file moved from {0} to {1}", sfile.toString(), rename.toString()));
                     }
                     return;
                 } catch (OutOfMemoryError oom) {
-                    addMessage(_("ERROR - Out of memory, cannot create torrent from {0}", sfile.getName()) + ": " + oom.getMessage());
+                    addMessage(_t("ERROR - Out of memory, cannot create torrent from {0}", sfile.getName()) + ": " + oom.getMessage());
                     return;
                 } finally {
                     if (fis != null) try { fis.close(); } catch (IOException ioe) {}
@@ -1295,9 +1295,9 @@ public class SnarkManager implements CompleteListener {
         // Were we running last time?
         if (!dontAutoStart && shouldAutoStart() && running) {
             torrent.startTorrent();
-            addMessage(_("Torrent added and started: \"{0}\"", torrent.getBaseName()));
+            addMessage(_t("Torrent added and started: \"{0}\"", torrent.getBaseName()));
         } else {
-            addMessage(_("Torrent added: \"{0}\"", torrent.getBaseName()));
+            addMessage(_t("Torrent added: \"{0}\"", torrent.getBaseName()));
         }
     }
     
@@ -1362,7 +1362,7 @@ public class SnarkManager implements CompleteListener {
         synchronized (_snarks) {
             Snark snark = getTorrentByInfoHash(ih);
             if (snark != null) {
-                addMessage(_("Torrent with this info hash is already running: {0}", snark.getBaseName()));
+                addMessage(_t("Torrent with this info hash is already running: {0}", snark.getBaseName()));
                 return null;
             }
             // Tell the dir monitor not to delete us
@@ -1373,17 +1373,17 @@ public class SnarkManager implements CompleteListener {
         }
         if (autoStart) {
             startTorrent(ih);
-            addMessage(_("Fetching {0}", name));
+            addMessage(_t("Fetching {0}", name));
             DHT dht = _util.getDHT();
             boolean shouldWarn = _util.connected() &&
                                  _util.getOpenTrackers().isEmpty() &&
                                  ((!_util.shouldUseDHT()) || dht == null || dht.size() <= 0);
             if (shouldWarn) {
-                addMessage(_("Open trackers are disabled and we have no DHT peers. " +
+                addMessage(_t("Open trackers are disabled and we have no DHT peers. " +
                              "Fetch of {0} may not succeed until you start another torrent, enable open trackers, or enable DHT.", name));
             }
         } else {
-            addMessage(_("Adding {0}", name));
+            addMessage(_t("Adding {0}", name));
         }
         return torrent;
     }
@@ -1416,7 +1416,7 @@ public class SnarkManager implements CompleteListener {
         synchronized (_snarks) {
             Snark snark = getTorrentByInfoHash(torrent.getInfoHash());
             if (snark != null) {
-                addMessage(_("Download already running: {0}", snark.getBaseName()));
+                addMessage(_t("Download already running: {0}", snark.getBaseName()));
                 return;
             }
             String name = torrent.getName();
@@ -1450,7 +1450,7 @@ public class SnarkManager implements CompleteListener {
         synchronized (_snarks) {
             Snark snark = getTorrentByInfoHash(metainfo.getInfoHash());
             if (snark != null) {
-                addMessage(_("Torrent with this info hash is already running: {0}", snark.getBaseName()));
+                addMessage(_t("Torrent with this info hash is already running: {0}", snark.getBaseName()));
                 return false;
             } else {
                 saveTorrentStatus(metainfo, bitfield, null, baseFile, true, 0, true); // no file priorities
@@ -1461,7 +1461,7 @@ public class SnarkManager implements CompleteListener {
                 // hold the lock for a long time
                 addTorrent(filename, baseFile, dontAutoStart);
             } catch (IOException ioe) {
-                addMessage(_("Failed to copy torrent file to {0}", filename));
+                addMessage(_t("Failed to copy torrent file to {0}", filename));
                 _log.error("Failed to write torrent file", ioe);
                 return false;
             }
@@ -1487,7 +1487,7 @@ public class SnarkManager implements CompleteListener {
         synchronized (_snarks) {
             boolean success = FileUtil.copy(fromfile.getAbsolutePath(), filename, false);
             if (!success) {
-                addMessage(_("Failed to copy torrent file to {0}", filename));
+                addMessage(_t("Failed to copy torrent file to {0}", filename));
                 _log.error("Failed to write torrent file to " + filename);
                 return;
             }
@@ -1901,18 +1901,18 @@ public class SnarkManager implements CompleteListener {
     private String validateTorrent(MetaInfo info) {
         List<List<String>> files = info.getFiles();
         if ( (files != null) && (files.size() > MAX_FILES_PER_TORRENT) ) {
-            return _("Too many files in \"{0}\" ({1})!", info.getName(), files.size());
+            return _t("Too many files in \"{0}\" ({1})!", info.getName(), files.size());
         } else if ( (files == null) && (info.getName().endsWith(".torrent")) ) {
-            return _("Torrent file \"{0}\" cannot end in \".torrent\"!", info.getName());
+            return _t("Torrent file \"{0}\" cannot end in \".torrent\"!", info.getName());
         } else if (info.getPieces() <= 0) {
-            return _("No pieces in \"{0}\"!", info.getName());
+            return _t("No pieces in \"{0}\"!", info.getName());
         } else if (info.getPieces() > Storage.MAX_PIECES) {
-            return _("Too many pieces in \"{0}\", limit is {1}!", info.getName(), Storage.MAX_PIECES);
+            return _t("Too many pieces in \"{0}\", limit is {1}!", info.getName(), Storage.MAX_PIECES);
         } else if (info.getPieceLength(0) > Storage.MAX_PIECE_SIZE) {
-            return _("Pieces are too large in \"{0}\" ({1}B)!", info.getName(), DataHelper.formatSize2(info.getPieceLength(0))) + ' ' +
-                   _("Limit is {0}B", DataHelper.formatSize2(Storage.MAX_PIECE_SIZE));
+            return _t("Pieces are too large in \"{0}\" ({1}B)!", info.getName(), DataHelper.formatSize2(info.getPieceLength(0))) + ' ' +
+                   _t("Limit is {0}B", DataHelper.formatSize2(Storage.MAX_PIECE_SIZE));
         } else if (info.getTotalLength() <= 0) {
-            return _("Torrent \"{0}\" has no data!", info.getName());
+            return _t("Torrent \"{0}\" has no data!", info.getName());
         } else if (info.getTotalLength() > Storage.MAX_TOTAL_SIZE) {
             System.out.println("torrent info: " + info.toString());
             List<Long> lengths = info.getLengths();
@@ -1920,7 +1920,7 @@ public class SnarkManager implements CompleteListener {
                 for (int i = 0; i < lengths.size(); i++)
                     System.out.println("File " + i + " is " + lengths.get(i) + " long.");
             
-            return _("Torrents larger than {0}B are not supported yet \"{1}\"!", Storage.MAX_TOTAL_SIZE, info.getName());
+            return _t("Torrents larger than {0}B are not supported yet \"{1}\"!", Storage.MAX_TOTAL_SIZE, info.getName());
         } else {
             // ok
             return null;
@@ -1937,7 +1937,7 @@ public class SnarkManager implements CompleteListener {
             filename = sfile.getCanonicalPath();
         } catch (IOException ioe) {
             _log.error("Unable to remove the torrent " + filename, ioe);
-            addMessage(_("Error: Could not remove the torrent {0}", filename) + ": " + ioe.getMessage());
+            addMessage(_t("Error: Could not remove the torrent {0}", filename) + ": " + ioe.getMessage());
             return null;
         }
         int remaining = 0;
@@ -1960,7 +1960,7 @@ public class SnarkManager implements CompleteListener {
             if (shouldRemove)
                 removeTorrentStatus(torrent);
             if (!wasStopped)
-                addMessage(_("Torrent stopped: \"{0}\"", torrent.getBaseName()));
+                addMessage(_t("Torrent stopped: \"{0}\"", torrent.getBaseName()));
         }
         return torrent;
     }
@@ -1979,7 +1979,7 @@ public class SnarkManager implements CompleteListener {
         boolean wasStopped = torrent.isStopped();
         torrent.stopTorrent();
         if (!wasStopped)
-            addMessage(_("Torrent stopped: \"{0}\"", torrent.getBaseName()));
+            addMessage(_t("Torrent stopped: \"{0}\"", torrent.getBaseName()));
         if (shouldRemove)
             removeTorrentStatus(torrent);
     }
@@ -1999,7 +1999,7 @@ public class SnarkManager implements CompleteListener {
             File torrentFile = new File(filename);
             torrentFile.delete();
         }
-        addMessage(_("Torrent removed: \"{0}\"", torrent.getBaseName()));
+        addMessage(_t("Torrent removed: \"{0}\"", torrent.getBaseName()));
     }
     
     private class DirMonitor implements Runnable {
@@ -2007,7 +2007,7 @@ public class SnarkManager implements CompleteListener {
             // don't bother delaying if auto start is false
             long delay = (60L * 1000) * getStartupDelayMinutes();
             if (delay > 0 && shouldAutoStart()) {
-                addMessage(_("Adding torrents in {0}", DataHelper.formatDuration2(delay)));
+                addMessage(_t("Adding torrents in {0}", DataHelper.formatDuration2(delay)));
                 try { Thread.sleep(delay); } catch (InterruptedException ie) {}
                 // Remove that first message
                 if (_messages.size() == 1)
@@ -2041,7 +2041,7 @@ public class SnarkManager implements CompleteListener {
                         _log.error("Error in the DirectoryMonitor", e);
                     }
                     if (!_snarks.isEmpty())
-                        addMessage(_("Up bandwidth limit is {0} KBps", _util.getMaxUpBW()));
+                        addMessage(_t("Up bandwidth limit is {0} KBps", _util.getMaxUpBW()));
                     // To fix bug where files were left behind,
                     // but also good for when user removes snarks when i2p is not running
                     // Don't run if there was an error, as we would delete the torrent config
@@ -2072,7 +2072,7 @@ public class SnarkManager implements CompleteListener {
             buf.append('/');
         buf.append("\">").append(base).append("</a>");
         if (snark.getDownloaded() > 0)
-            addMessageNoEscape(_("Download finished: {0}", buf.toString())); //  + " (" + _("size: {0}B", DataHelper.formatSize2(len)) + ')');
+            addMessageNoEscape(_t("Download finished: {0}", buf.toString())); //  + " (" + _t("size: {0}B", DataHelper.formatSize2(len)) + ')');
         updateStatus(snark);
     }
     
@@ -2127,11 +2127,11 @@ public class SnarkManager implements CompleteListener {
                 }
                 _magnets.remove(snark.getName());
                 removeMagnetStatus(snark.getInfoHash());
-                addMessage(_("Metainfo received for {0}", snark.getName()));
-                addMessage(_("Starting up torrent {0}", storage.getBaseName()));
+                addMessage(_t("Metainfo received for {0}", snark.getName()));
+                addMessage(_t("Starting up torrent {0}", storage.getBaseName()));
                 return name;
             } catch (IOException ioe) {
-                addMessage(_("Failed to copy torrent file to {0}", name));
+                addMessage(_t("Failed to copy torrent file to {0}", name));
                 _log.error("Failed to write torrent file", ioe);
             }
         }
@@ -2143,7 +2143,7 @@ public class SnarkManager implements CompleteListener {
      * @since 0.9
      */
     public void fatal(Snark snark, String error) {
-        addMessage(_("Error on torrent {0}", snark.getName()) + ": " + error);
+        addMessage(_t("Error on torrent {0}", snark.getName()) + ": " + error);
     }
     
     /**
@@ -2180,7 +2180,7 @@ public class SnarkManager implements CompleteListener {
                     Properties config = getConfig(ih);
                     String name = config.getProperty(PROP_META_MAGNET_DN);
                     if (name == null)
-                        name = _("Magnet") + ' ' + I2PSnarkUtil.toHex(ih);
+                        name = _t("Magnet") + ' ' + I2PSnarkUtil.toHex(ih);
                     String tracker = config.getProperty(PROP_META_MAGNET_TR);
                     String dir = config.getProperty(PROP_META_MAGNET_DIR);
                     File dirf = (dir != null) ? (new File(dir)) : null;
@@ -2223,13 +2223,13 @@ public class SnarkManager implements CompleteListener {
                 // already known.  noop
             } else {
                 if (shouldAutoStart() && !_util.connect())
-                    addMessage(_("Unable to connect to I2P!"));
+                    addMessage(_t("Unable to connect to I2P!"));
                 try {
                     // Snark.fatal() throws a RuntimeException
                     // don't let one bad torrent kill the whole loop
                     addTorrent(name, null, !shouldAutoStart());
                 } catch (Exception e) {
-                    addMessage(_("Error: Could not add the torrent {0}", name) + ": " + e);
+                    addMessage(_t("Error: Could not add the torrent {0}", name) + ": " + e);
                     _log.error("Unable to add the torrent " + name, e);
                     rv = false;
                 }
@@ -2256,17 +2256,17 @@ public class SnarkManager implements CompleteListener {
     }
 
     /** translate */
-    private String _(String s) {
+    private String _t(String s) {
         return _util.getString(s);
     }
 
     /** translate */
-    private String _(String s, Object o) {
+    private String _t(String s, Object o) {
         return _util.getString(s, o);
     }
 
     /** translate */
-    private String _(String s, Object o, Object o2) {
+    private String _t(String s, Object o, Object o2) {
         return _util.getString(s, o, o2);
     }
 
@@ -2389,8 +2389,8 @@ public class SnarkManager implements CompleteListener {
         }
         boolean connected = _util.connected();
         if ((!connected) && !_util.isConnecting())
-            addMessage(_("Opening the I2P tunnel"));
-        addMessage(_("Starting up torrent {0}", snark.getBaseName()));
+            addMessage(_t("Opening the I2P tunnel"));
+        addMessage(_t("Starting up torrent {0}", snark.getBaseName()));
         if (connected) {
             snark.startTorrent();
         } else {
@@ -2409,7 +2409,7 @@ public class SnarkManager implements CompleteListener {
         if (_util.connected()) {
             startAll();
         } else {
-            addMessage(_("Opening the I2P tunnel and starting all torrents."));
+            addMessage(_t("Opening the I2P tunnel and starting all torrents."));
             for (Snark snark : _snarks.values()) {
                 // mark it for the UI
                 snark.setStarting();
@@ -2472,7 +2472,7 @@ public class SnarkManager implements CompleteListener {
         for (Snark snark : _snarks.values()) {
             if (!snark.isStopped()) {
                 if (count == 0)
-                    addMessage(_("Stopping all torrents and closing the I2P tunnel."));
+                    addMessage(_t("Stopping all torrents and closing the I2P tunnel."));
                 count++;
                 if (finalShutdown)
                     snark.stopTorrent(true);
@@ -2491,14 +2491,14 @@ public class SnarkManager implements CompleteListener {
                 // Schedule this even for final shutdown, as there's a chance
                 // that it's just this webapp that is stopping.
                 _context.simpleTimer2().addEvent(new Disconnector(), 60*1000);
-                addMessage(_("Closing I2P tunnel after notifying trackers."));
+                addMessage(_t("Closing I2P tunnel after notifying trackers."));
                 if (finalShutdown) {
                     try { Thread.sleep(5*1000); } catch (InterruptedException ie) {}
                 }
             } else {
                 _util.disconnect();
                 _stopping = false;
-                addMessage(_("I2P tunnel closed."));
+                addMessage(_t("I2P tunnel closed."));
             }
         }
     }
@@ -2509,7 +2509,7 @@ public class SnarkManager implements CompleteListener {
             if (_util.connected()) {
                 _util.disconnect();
                 _stopping = false;
-                addMessage(_("I2P tunnel closed."));
+                addMessage(_t("I2P tunnel closed."));
             }
         }
     }
@@ -2552,13 +2552,13 @@ public class SnarkManager implements CompleteListener {
                     int pieces = snark.getPieces();
                     double completion = (pieces - snark.getNeeded()) / (double) pieces;
                     String complete = (new DecimalFormat("0.00%")).format(completion);
-                    addMessage(_("Finished recheck of torrent {0}, now {1} complete", snark.getBaseName(), complete));
+                    addMessage(_t("Finished recheck of torrent {0}, now {1} complete", snark.getBaseName(), complete));
                 } else {
-                    addMessage(_("Finished recheck of torrent {0}, unchanged", snark.getBaseName()));
+                    addMessage(_t("Finished recheck of torrent {0}, unchanged", snark.getBaseName()));
                 }
             } catch (Exception e) {
                 _log.error("Error rechecking " + snark.getBaseName(), e);
-                addMessage(_("Error checking the torrent {0}", snark.getBaseName()) + ": " + e);
+                addMessage(_t("Error checking the torrent {0}", snark.getBaseName()) + ": " + e);
             }
         }
     }
diff --git a/apps/i2psnark/java/src/org/klomp/snark/web/FetchAndAdd.java b/apps/i2psnark/java/src/org/klomp/snark/web/FetchAndAdd.java
index 99e2f62a69..5537b33f14 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/web/FetchAndAdd.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/web/FetchAndAdd.java
@@ -77,7 +77,7 @@ public class FetchAndAdd extends Snark implements EepGet.StatusListener, Runnabl
         _log = ctx.logManager().getLog(FetchAndAdd.class);
         _mgr = mgr;
         _url = url;
-        _name = _("Download torrent file from {0}", url);
+        _name = _t("Download torrent file from {0}", url);
         _dataDir = dataDir;
         byte[] fake = null;
         try {
@@ -90,7 +90,7 @@ public class FetchAndAdd extends Snark implements EepGet.StatusListener, Runnabl
      *  Set off by startTorrent()
      */
     public void run() {
-        _mgr.addMessageNoEscape(_("Fetching {0}", urlify(_url)));
+        _mgr.addMessageNoEscape(_t("Fetching {0}", urlify(_url)));
         File file = get();
         if (!_isRunning)  // stopped?
             return;
@@ -100,7 +100,7 @@ public class FetchAndAdd extends Snark implements EepGet.StatusListener, Runnabl
             _mgr.deleteMagnet(this);
             add(file);
         } else {
-            _mgr.addMessageNoEscape(_("Torrent was not retrieved from {0}", urlify(_url)) +
+            _mgr.addMessageNoEscape(_t("Torrent was not retrieved from {0}", urlify(_url)) +
                             ((_failCause != null) ? (": " + DataHelper.stripHTML(_failCause)) : ""));
         }
         if (file != null)
@@ -127,7 +127,7 @@ public class FetchAndAdd extends Snark implements EepGet.StatusListener, Runnabl
         out.deleteOnExit();
 
         if (!_mgr.util().connected()) {
-            _mgr.addMessage(_("Opening the I2P tunnel"));
+            _mgr.addMessage(_t("Opening the I2P tunnel"));
             if (!_mgr.util().connect())
                 return null;
         }
@@ -154,7 +154,7 @@ public class FetchAndAdd extends Snark implements EepGet.StatusListener, Runnabl
      *  This Snark may then be deleted.
      */
     private void add(File file) {
-        _mgr.addMessageNoEscape(_("Torrent fetched from {0}", urlify(_url)));
+        _mgr.addMessageNoEscape(_t("Torrent fetched from {0}", urlify(_url)));
         FileInputStream in = null;
         try {
             in = new FileInputStream(file);
@@ -163,7 +163,7 @@ public class FetchAndAdd extends Snark implements EepGet.StatusListener, Runnabl
             try { in.close(); } catch (IOException ioe) {}
             Snark snark = _mgr.getTorrentByInfoHash(fileInfoHash);
             if (snark != null) {
-                _mgr.addMessage(_("Torrent with this info hash is already running: {0}", snark.getBaseName()));
+                _mgr.addMessage(_t("Torrent with this info hash is already running: {0}", snark.getBaseName()));
                 return;
             }
 
@@ -175,9 +175,9 @@ public class FetchAndAdd extends Snark implements EepGet.StatusListener, Runnabl
 
             if (torrentFile.exists()) {
                 if (_mgr.getTorrent(canonical) != null)
-                    _mgr.addMessage(_("Torrent already running: {0}", name));
+                    _mgr.addMessage(_t("Torrent already running: {0}", name));
                 else
-                    _mgr.addMessage(_("Torrent already in the queue: {0}", name));
+                    _mgr.addMessage(_t("Torrent already in the queue: {0}", name));
             } else {
                 // This may take a LONG time to create the storage.
                 _mgr.copyAndAddTorrent(file, canonical, _dataDir);
@@ -188,9 +188,9 @@ public class FetchAndAdd extends Snark implements EepGet.StatusListener, Runnabl
                     throw new IOException("Unknown error - check logs");
             }
         } catch (IOException ioe) {
-            _mgr.addMessageNoEscape(_("Torrent at {0} was not valid", urlify(_url)) + ": " + DataHelper.stripHTML(ioe.getMessage()));
+            _mgr.addMessageNoEscape(_t("Torrent at {0} was not valid", urlify(_url)) + ": " + DataHelper.stripHTML(ioe.getMessage()));
         } catch (OutOfMemoryError oom) {
-            _mgr.addMessageNoEscape(_("ERROR - Out of memory, cannot create torrent from {0}", urlify(_url)) + ": " + DataHelper.stripHTML(oom.getMessage()));
+            _mgr.addMessageNoEscape(_t("ERROR - Out of memory, cannot create torrent from {0}", urlify(_url)) + ": " + DataHelper.stripHTML(oom.getMessage()));
         } finally {
             try { if (in != null) in.close(); } catch (IOException ioe) {}
         }
@@ -345,11 +345,11 @@ public class FetchAndAdd extends Snark implements EepGet.StatusListener, Runnabl
 
     // End of EepGet status listeners
 
-    private String _(String s) {
+    private String _t(String s) {
         return _mgr.util().getString(s);
     }
 
-    private String _(String s, String o) {
+    private String _t(String s, String o) {
         return _mgr.util().getString(s, o);
     }
 
diff --git a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
index 08ea4c24ff..72ea2ecadf 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
@@ -266,14 +266,14 @@ public class I2PSnarkServlet extends BasicServlet {
                   "<head><link rel=\"shortcut icon\" href=\"" + _themePath + "favicon.ico\">\n" +
                   "<title>");
         if (_contextName.equals(DEFAULT_NAME))
-            out.write(_("I2PSnark"));
+            out.write(_t("I2PSnark"));
         else
             out.write(_contextName);
         out.write(" - ");
         if (isConfigure)
-            out.write(_("Configuration"));
+            out.write(_t("Configuration"));
         else
-            out.write(_("Anonymous BitTorrent Client"));
+            out.write(_t("Anonymous BitTorrent Client"));
         String peerParam = req.getParameter("p");
         if ("2".equals(peerParam))
             out.write(" | Debug Mode");
@@ -287,7 +287,7 @@ public class I2PSnarkServlet extends BasicServlet {
                 //out.write("<meta http-equiv=\"refresh\" content=\"" + delay + ";/i2psnark/" + peerString + "\">\n");
                 out.write("<script src=\"/js/ajax.js\" type=\"text/javascript\"></script>\n" +
                           "<script type=\"text/javascript\">\n"  +
-                          "var failMessage = \"<div class=\\\"routerdown\\\"><b>" + _("Router is down") + "<\\/b><\\/div>\";\n" +
+                          "var failMessage = \"<div class=\\\"routerdown\\\"><b>" + _t("Router is down") + "<\\/b><\\/div>\";\n" +
                           "function requestAjax1() { ajax(\"" + _contextPath + "/.ajax/xhr1.html" +
                           peerString.replace("&amp;", "&") +  // don't html escape in js
                           "\", \"mainsection\", " + (delay*1000) + "); }\n" +
@@ -304,27 +304,27 @@ public class I2PSnarkServlet extends BasicServlet {
         List<Tracker> sortedTrackers = null;
         if (isConfigure) {
             out.write("<div class=\"snarknavbar\"><a href=\"" + _contextPath + "/\" title=\"");
-            out.write(_("Torrents"));
+            out.write(_t("Torrents"));
             out.write("\" class=\"snarkRefresh\">");
             out.write(toThemeImg("arrow_refresh"));
             out.write("&nbsp;&nbsp;");
             if (_contextName.equals(DEFAULT_NAME))
-                out.write(_("I2PSnark"));
+                out.write(_t("I2PSnark"));
             else
                 out.write(_contextName);
             out.write("</a>");
         } else {
             out.write("<div class=\"snarknavbar\"><a href=\"" + _contextPath + '/' + peerString + "\" title=\"");
-            out.write(_("Refresh page"));
+            out.write(_t("Refresh page"));
             out.write("\" class=\"snarkRefresh\">");
             out.write(toThemeImg("arrow_refresh"));
             out.write("&nbsp;&nbsp;");
             if (_contextName.equals(DEFAULT_NAME))
-                out.write(_("I2PSnark"));
+                out.write(_t("I2PSnark"));
             else
                 out.write(_contextName);
             out.write("</a> <a href=\"http://forum.i2p/viewforum.php?f=21\" class=\"snarkRefresh\" target=\"_blank\">");
-            out.write(_("Forum"));
+            out.write(_t("Forum"));
             out.write("</a>\n");
 
             sortedTrackers = _manager.getSortedTrackers();
@@ -339,7 +339,7 @@ public class I2PSnarkServlet extends BasicServlet {
         out.write("</div>\n");
         String newURL = req.getParameter("newURL");
         if (newURL != null && newURL.trim().length() > 0 && req.getMethod().equals("GET"))
-            _manager.addMessage(_("Click \"Add torrent\" button to fetch torrent"));
+            _manager.addMessage(_t("Click \"Add torrent\" button to fetch torrent"));
         out.write("<div class=\"page\"><div id=\"mainsection\" class=\"mainsection\">");
 
         writeMessages(out, isConfigure, peerString);
@@ -392,7 +392,7 @@ public class I2PSnarkServlet extends BasicServlet {
             else
                 out.write("?");
             out.write("action=Clear&amp;nonce=" + _nonce + "\">");
-            String tx = _("clear messages");
+            String tx = _t("clear messages");
             out.write(toThemeImg("delete", tx, tx));
             out.write("</a>" +
                       "<ul>");
@@ -447,9 +447,9 @@ public class I2PSnarkServlet extends BasicServlet {
             out.write("<a href=\"" + _contextPath + '/' + getQueryString(req, null, null, sort));
             out.write("\">");
         }
-        String tx = _("Status");
+        String tx = _t("Status");
         out.write(toThemeImg("status", tx,
-                             showSort ? _("Sort by {0}", tx)
+                             showSort ? _t("Sort by {0}", tx)
                                       : tx));
         if (showSort)
             out.write("</a>");
@@ -460,13 +460,13 @@ public class I2PSnarkServlet extends BasicServlet {
                 // disable peer view
                 out.write(getQueryString(req, "", null, null));
                 out.write("\">");
-                tx = _("Hide Peers");
+                tx = _t("Hide Peers");
                 out.write(toThemeImg("hidepeers", tx, tx));
             } else {
                 // enable peer view
                 out.write(getQueryString(req, "1", null, null));
                 out.write("\">");
-                tx = _("Show Peers");
+                tx = _t("Show Peers");
                 out.write(toThemeImg("showpeers", tx, tx));
             }
             out.write("</a><br>\n"); 
@@ -489,9 +489,9 @@ public class I2PSnarkServlet extends BasicServlet {
             out.write("<a href=\"" + _contextPath + '/' + getQueryString(req, null, null, sort));
             out.write("\">");
         }
-        tx = _("Torrent");
+        tx = _t("Torrent");
         out.write(toThemeImg("torrent", tx,
-                             showSort ? _("Sort by {0}", (isTypeSort ? _("File type") : tx))
+                             showSort ? _t("Sort by {0}", (isTypeSort ? _t("File type") : tx))
                                       : tx));
         if (showSort)
             out.write("</a>");
@@ -507,10 +507,10 @@ public class I2PSnarkServlet extends BasicServlet {
                 out.write("\">");
             }
             // Translators: Please keep short or translate as " "
-            tx = _("ETA");
+            tx = _t("ETA");
             out.write(toThemeImg("eta", tx,
-                                 showSort ? _("Sort by {0}", _("Estimated time remaining"))
-                                          : _("Estimated time remaining")));
+                                 showSort ? _t("Sort by {0}", _t("Estimated time remaining"))
+                                          : _t("Estimated time remaining")));
             if (showSort)
                 out.write("</a>");
         }
@@ -533,10 +533,10 @@ public class I2PSnarkServlet extends BasicServlet {
             out.write("\">");
         }
         // Translators: Please keep short or translate as " "
-        tx = _("RX");
+        tx = _t("RX");
         out.write(toThemeImg("head_rx", tx,
-                             showSort ? _("Sort by {0}", (isDlSort ? _("Downloaded") : _("Size")))
-                                      : _("Downloaded")));
+                             showSort ? _t("Sort by {0}", (isDlSort ? _t("Downloaded") : _t("Size")))
+                                      : _t("Downloaded")));
         if (showSort)
             out.write("</a>");
         out.write("</th>\n<th align=\"right\">");
@@ -564,10 +564,10 @@ public class I2PSnarkServlet extends BasicServlet {
                 out.write("\">");
             }
             // Translators: Please keep short or translate as " "
-            tx = _("TX");
+            tx = _t("TX");
             out.write(toThemeImg("head_tx", tx,
-                                 showSort ? _("Sort by {0}", (nextRatSort ? _("Upload ratio") : _("Uploaded")))
-                                          : _("Uploaded")));
+                                 showSort ? _t("Sort by {0}", (nextRatSort ? _t("Upload ratio") : _t("Uploaded")))
+                                          : _t("Uploaded")));
             if (showSort)
                 out.write("</a>");
         }
@@ -579,10 +579,10 @@ public class I2PSnarkServlet extends BasicServlet {
                 out.write("\">");
             }
             // Translators: Please keep short or translate as " "
-            tx = _("RX Rate");
+            tx = _t("RX Rate");
             out.write(toThemeImg("head_rxspeed", tx,
-                                 showSort ? _("Sort by {0}", _("Down Rate"))
-                                          : _("Down Rate")));
+                                 showSort ? _t("Sort by {0}", _t("Down Rate"))
+                                          : _t("Down Rate")));
             if (showSort)
                 out.write("</a>");
         }
@@ -594,10 +594,10 @@ public class I2PSnarkServlet extends BasicServlet {
                 out.write("\">");
             }
             // Translators: Please keep short or translate as " "
-            tx = _("TX Rate");
+            tx = _t("TX Rate");
             out.write(toThemeImg("head_txspeed", tx,
-                                 showSort ? _("Sort by {0}", _("Up Rate"))
-                                          : _("Up Rate")));
+                                 showSort ? _t("Sort by {0}", _t("Up Rate"))
+                                          : _t("Up Rate")));
             if (showSort)
                 out.write("</a>");
         }
@@ -613,9 +613,9 @@ public class I2PSnarkServlet extends BasicServlet {
                 //out.write("<input type=\"image\" name=\"action\" value=\"StopAll\" title=\"");
                 out.write("<input type=\"image\" name=\"action_StopAll\" value=\"foo\" title=\"");
             }
-            out.write(_("Stop all torrents and the I2P tunnel"));
+            out.write(_t("Stop all torrents and the I2P tunnel"));
             out.write("\" src=\"" + _imgPath + "stop_all.png\" alt=\"");
-            out.write(_("Stop All"));
+            out.write(_t("Stop All"));
             out.write("\">");
             if (isDegraded)
                 out.write("</a>");
@@ -627,9 +627,9 @@ public class I2PSnarkServlet extends BasicServlet {
                         out.write("<a href=\"" + _contextPath + "/?action=StartAll&amp;nonce=" + _nonce + "\"><img title=\"");
                     else
                         out.write("<input type=\"image\" name=\"action_StartAll\" value=\"foo\" title=\"");
-                    out.write(_("Start all stopped torrents"));
+                    out.write(_t("Start all stopped torrents"));
                     out.write("\" src=\"" + _imgPath + "start_all.png\" alt=\"");
-                    out.write(_("Start All"));
+                    out.write(_t("Start All"));
                     out.write("\">");
                     if (isDegraded)
                         out.write("</a>");
@@ -641,9 +641,9 @@ public class I2PSnarkServlet extends BasicServlet {
                 out.write("<a href=\"" + _contextPath + "/?action=StartAll&amp;nonce=" + _nonce + "\"><img title=\"");
             else
                 out.write("<input type=\"image\" name=\"action_StartAll\" value=\"foo\" title=\"");
-            out.write(_("Start all torrents and the I2P tunnel"));
+            out.write(_t("Start all torrents and the I2P tunnel"));
             out.write("\" src=\"" + _imgPath + "start_all.png\" alt=\"");
-            out.write(_("Start All"));
+            out.write(_t("Start All"));
             out.write("\">");
             if (isDegraded)
                 out.write("</a>");
@@ -666,13 +666,13 @@ public class I2PSnarkServlet extends BasicServlet {
             out.write("<tr class=\"snarkTorrentNoneLoaded\">" +
                       "<td class=\"snarkTorrentNoneLoaded\"" +
                       " colspan=\"11\"><i>");
-            out.write(_("No torrents loaded."));
+            out.write(_t("No torrents loaded."));
             out.write("</i></td></tr>\n");
         } else /** if (snarks.size() > 1) */ {
             out.write("<tfoot><tr>\n" +
                       "    <th align=\"left\" colspan=\"6\">");
             out.write("&nbsp;");
-            out.write(_("Totals"));
+            out.write(_t("Totals"));
             out.write(":&nbsp;");
             out.write(ngettext("1 torrent", "{0} torrents", total));
             out.write(", ");
@@ -693,7 +693,7 @@ public class I2PSnarkServlet extends BasicServlet {
             if(!IPString.equals("unknown")) {
                 // Only truncate if it's an actual dest
                 out.write(";&nbsp;");
-                out.write(_("Dest"));
+                out.write(_t("Dest"));
                 out.write(":&nbsp;<tt>");
                 out.write(IPString.substring(0, 4));
                 out.write("</tt>");
@@ -821,7 +821,7 @@ public class I2PSnarkServlet extends BasicServlet {
                 out.write("<a href=\"" + _contextPath);
                 out.write(getQueryString(req, null, "", null));
                 out.write("\">");
-                out.write(toThemeImg("control_rewind_blue", _("First"), _("First page")));
+                out.write(toThemeImg("control_rewind_blue", _t("First"), _t("First page")));
                 out.write("</a>&nbsp;");
                 int prev = Math.max(0, start - pageSize);
                 //if (prev > 0) {
@@ -831,7 +831,7 @@ public class I2PSnarkServlet extends BasicServlet {
                     String sprev = (prev > 0) ? Integer.toString(prev) : "";
                     out.write(getQueryString(req, null, sprev, null));
                     out.write("\">");
-                    out.write(toThemeImg("control_back_blue", _("Prev"), _("Previous page")));
+                    out.write(toThemeImg("control_back_blue", _t("Prev"), _t("Previous page")));
                     out.write("</a>&nbsp;");
                 }
             } else {
@@ -853,7 +853,7 @@ public class I2PSnarkServlet extends BasicServlet {
                     page = pages;
                 else
                     page = 1 + (start / pageSize);
-                //out.write("&nbsp;" + _("Page {0}", page) + thinsp(noThinsp) + pages + "&nbsp;");
+                //out.write("&nbsp;" + _t("Page {0}", page) + thinsp(noThinsp) + pages + "&nbsp;");
                 out.write("&nbsp;&nbsp;" + page + thinsp(noThinsp) + pages + "&nbsp;&nbsp;");
             }
             if (start + pageSize < total) {
@@ -864,7 +864,7 @@ public class I2PSnarkServlet extends BasicServlet {
                     out.write("&nbsp;<a href=\"" + _contextPath);
                     out.write(getQueryString(req, null, Integer.toString(next), null));
                     out.write("\">");
-                    out.write(toThemeImg("control_play_blue", _("Next"), _("Next page")));
+                    out.write(toThemeImg("control_play_blue", _t("Next"), _t("Next page")));
                     out.write("</a>&nbsp;");
                 }
                 // Last
@@ -872,7 +872,7 @@ public class I2PSnarkServlet extends BasicServlet {
                 out.write("&nbsp;<a href=\"" + _contextPath);
                 out.write(getQueryString(req, null, Integer.toString(last), null));
                 out.write("\">");
-                out.write(toThemeImg("control_fastforward_blue", _("Last"), _("Last page")));
+                out.write(toThemeImg("control_fastforward_blue", _t("Last"), _t("Last page")));
                 out.write("</a>&nbsp;");
             } else {
                 out.write("&nbsp;" +
@@ -918,7 +918,7 @@ public class I2PSnarkServlet extends BasicServlet {
             if ( (newFile != null) && (newFile.trim().length() > 0) )
                 f = new File(newFile.trim());
             if ( (f != null) && (!f.exists()) ) {
-                _manager.addMessage(_("Torrent file {0} does not exist", newFile));
+                _manager.addMessage(_t("Torrent file {0} does not exist", newFile));
             }
             if ( (f != null) && (f.exists()) ) {
                 // NOTE - All this is disabled - load from local file disabled
@@ -929,16 +929,16 @@ public class I2PSnarkServlet extends BasicServlet {
                     
                     if (local.exists()) {
                         if (_manager.getTorrent(canonical) != null)
-                            _manager.addMessage(_("Torrent already running: {0}", newFile));
+                            _manager.addMessage(_t("Torrent already running: {0}", newFile));
                         else
-                            _manager.addMessage(_("Torrent already in the queue: {0}", newFile));
+                            _manager.addMessage(_t("Torrent already in the queue: {0}", newFile));
                     } else {
                         boolean ok = FileUtil.copy(f.getAbsolutePath(), local.getAbsolutePath(), true);
                         if (ok) {
-                            _manager.addMessage(_("Copying torrent to {0}", local.getAbsolutePath()));
+                            _manager.addMessage(_t("Copying torrent to {0}", local.getAbsolutePath()));
                             _manager.addTorrent(canonical);
                         } else {
-                            _manager.addMessage(_("Unable to copy the torrent to {0}", local.getAbsolutePath()) + ' ' + _("from {0}", f.getAbsolutePath()));
+                            _manager.addMessage(_t("Unable to copy the torrent to {0}", local.getAbsolutePath()) + ' ' + _t("from {0}", f.getAbsolutePath()));
                         }
                     }
                 } catch (IOException ioe) {
@@ -954,11 +954,11 @@ public class I2PSnarkServlet extends BasicServlet {
                     if (newDir.length() > 0) {
                         dir = new SecureFile(newDir);
                         if (!dir.isAbsolute()) {
-                            _manager.addMessage(_("Data directory must be an absolute path") + ": " + dir);
+                            _manager.addMessage(_t("Data directory must be an absolute path") + ": " + dir);
                             return;
                         }
                         if (!dir.isDirectory() && !dir.mkdirs()) {
-                            _manager.addMessage(_("Data directory cannot be created") + ": " + dir);
+                            _manager.addMessage(_t("Data directory cannot be created") + ": " + dir);
                             return;
                         }
                         Collection<Snark> snarks = _manager.getTorrents();
@@ -968,7 +968,7 @@ public class I2PSnarkServlet extends BasicServlet {
                                 continue;
                             File sbase = storage.getBase();
                             if (isParentOf(sbase, dir)) {
-                                _manager.addMessage(_("Cannot add torrent {0} inside another torrent: {1}",
+                                _manager.addMessage(_t("Cannot add torrent {0} inside another torrent: {1}",
                                                       dir.getAbsolutePath(), sbase));
                                 return;
                             }
@@ -983,7 +983,7 @@ public class I2PSnarkServlet extends BasicServlet {
                 } else if (newURL.length() == 40 && newURL.replaceAll("[a-fA-F0-9]", "").length() == 0) {
                     addMagnet(MagnetURI.MAGNET_FULL + newURL, dir);
                 } else {
-                    _manager.addMessage(_("Invalid URL: Must start with \"http://\", \"{0}\", or \"{1}\"",
+                    _manager.addMessage(_t("Invalid URL: Must start with \"http://\", \"{0}\", or \"{1}\"",
                                           MagnetURI.MAGNET, MagnetURI.MAGGOT));
                 }
             } else {
@@ -1024,7 +1024,7 @@ public class I2PSnarkServlet extends BasicServlet {
                                 // magnet - remove and delete are the same thing
                                 // Remove not shown on UI so we shouldn't get here
                                 _manager.deleteMagnet(snark);
-                                _manager.addMessage(_("Magnet deleted: {0}", name));
+                                _manager.addMessage(_t("Magnet deleted: {0}", name));
                                 return;
                             }
                             _manager.stopTorrent(snark, true);
@@ -1032,7 +1032,7 @@ public class I2PSnarkServlet extends BasicServlet {
                             // yeah, need to, otherwise it'll get autoadded again (at the moment
                             File f = new File(name);
                             f.delete();
-                            _manager.addMessage(_("Torrent file deleted: {0}", f.getAbsolutePath()));
+                            _manager.addMessage(_t("Torrent file deleted: {0}", f.getAbsolutePath()));
                             break;
                         }
                     }
@@ -1051,15 +1051,15 @@ public class I2PSnarkServlet extends BasicServlet {
                                 // magnet - remove and delete are the same thing
                                 _manager.deleteMagnet(snark);
                                 if (snark instanceof FetchAndAdd)
-                                    _manager.addMessage(_("Download deleted: {0}", name));
+                                    _manager.addMessage(_t("Download deleted: {0}", name));
                                 else
-                                    _manager.addMessage(_("Magnet deleted: {0}", name));
+                                    _manager.addMessage(_t("Magnet deleted: {0}", name));
                                 return;
                             }
                             _manager.stopTorrent(snark, true);
                             File f = new File(name);
                             f.delete();
-                            _manager.addMessage(_("Torrent file deleted: {0}", f.getAbsolutePath()));
+                            _manager.addMessage(_t("Torrent file deleted: {0}", f.getAbsolutePath()));
                             Storage storage = snark.getStorage();
                             if (storage == null)
                                 break;
@@ -1068,18 +1068,18 @@ public class I2PSnarkServlet extends BasicServlet {
                                 for (File df : storage.getFiles()) {
                                     // should be only one
                                     if (df.delete())
-                                        _manager.addMessage(_("Data file deleted: {0}", df.getAbsolutePath()));
+                                        _manager.addMessage(_t("Data file deleted: {0}", df.getAbsolutePath()));
                                     else
-                                        _manager.addMessage(_("Data file could not be deleted: {0}", df.getAbsolutePath()));
+                                        _manager.addMessage(_t("Data file could not be deleted: {0}", df.getAbsolutePath()));
                                 }
                                 break;
                             }
                             // step 1 delete files
                             for (File df : storage.getFiles()) {
                                 if (df.delete()) {
-                                    //_manager.addMessage(_("Data file deleted: {0}", df.getAbsolutePath()));
+                                    //_manager.addMessage(_t("Data file deleted: {0}", df.getAbsolutePath()));
                                 } else {
-                                    _manager.addMessage(_("Data file could not be deleted: {0}", df.getAbsolutePath()));
+                                    _manager.addMessage(_t("Data file could not be deleted: {0}", df.getAbsolutePath()));
                                 }
                             }
                             // step 2 delete dirs bottom-up
@@ -1092,17 +1092,17 @@ public class I2PSnarkServlet extends BasicServlet {
                             for (File df : dirs) {
                                 if (df.delete()) {
                                     ok = true;
-                                    //_manager.addMessage(_("Data dir deleted: {0}", df.getAbsolutePath()));
+                                    //_manager.addMessage(_t("Data dir deleted: {0}", df.getAbsolutePath()));
                                 } else {
                                     ok = false;
-                                    _manager.addMessage(_("Directory could not be deleted: {0}", df.getAbsolutePath()));
+                                    _manager.addMessage(_t("Directory could not be deleted: {0}", df.getAbsolutePath()));
                                     if (_log.shouldLog(Log.WARN))
                                         _log.warn("Could not delete dir " + df);
                                 }
                             }
                             // step 3 message for base (last one)
                             if (ok)
-                                _manager.addMessage(_("Directory deleted: {0}", storage.getBase()));
+                                _manager.addMessage(_t("Directory deleted: {0}", storage.getBase()));
                             break;
                         }
                     }
@@ -1153,18 +1153,18 @@ public class I2PSnarkServlet extends BasicServlet {
                 if (baseFile.exists()) {
                     String torrentName = baseFile.getName();
                     if (torrentName.toLowerCase(Locale.US).endsWith(".torrent")) {
-                        _manager.addMessage(_("Cannot add a torrent ending in \".torrent\": {0}", baseFile.getAbsolutePath()));
+                        _manager.addMessage(_t("Cannot add a torrent ending in \".torrent\": {0}", baseFile.getAbsolutePath()));
                         return;
                     }
                     Snark snark = _manager.getTorrentByBaseName(torrentName);
                     if (snark != null) {
-                        _manager.addMessage(_("Torrent with this name is already running: {0}", torrentName));
+                        _manager.addMessage(_t("Torrent with this name is already running: {0}", torrentName));
                         return;
                     }
                     if (isParentOf(baseFile,_manager.getDataDir()) ||
                         isParentOf(baseFile, _manager.util().getContext().getBaseDir()) ||
                         isParentOf(baseFile, _manager.util().getContext().getConfigDir())) {
-                        _manager.addMessage(_("Cannot add a torrent including an I2P directory: {0}", baseFile.getAbsolutePath()));
+                        _manager.addMessage(_t("Cannot add a torrent including an I2P directory: {0}", baseFile.getAbsolutePath()));
                         return;
                     }
                     Collection<Snark> snarks = _manager.getTorrents();
@@ -1174,12 +1174,12 @@ public class I2PSnarkServlet extends BasicServlet {
                             continue;
                         File sbase = storage.getBase();
                         if (isParentOf(sbase, baseFile)) {
-                            _manager.addMessage(_("Cannot add torrent {0} inside another torrent: {1}",
+                            _manager.addMessage(_t("Cannot add torrent {0} inside another torrent: {1}",
                                                   baseFile.getAbsolutePath(), sbase));
                             return;
                         }
                         if (isParentOf(baseFile, sbase)) {
-                            _manager.addMessage(_("Cannot add torrent {0} including another torrent: {1}",
+                            _manager.addMessage(_t("Cannot add torrent {0} including another torrent: {1}",
                                                   baseFile.getAbsolutePath(), sbase));
                             return;
                         }
@@ -1205,7 +1205,7 @@ public class I2PSnarkServlet extends BasicServlet {
                     if (!backupURLs.isEmpty()) {
                         // BEP 12 - Put primary first, then the others, each as the sole entry in their own list
                         if (announceURL == null) {
-                            _manager.addMessage(_("Error - Cannot include alternate trackers without a primary tracker"));
+                            _manager.addMessage(_t("Error - Cannot include alternate trackers without a primary tracker"));
                             return;
                         }
                         backupURLs.add(0, announceURL);
@@ -1218,7 +1218,7 @@ public class I2PSnarkServlet extends BasicServlet {
                                 hasPublic = true;
                         }
                         if (hasPrivate && hasPublic) {
-                            _manager.addMessage(_("Error - Cannot mix private and public trackers in a torrent"));
+                            _manager.addMessage(_t("Error - Cannot mix private and public trackers in a torrent"));
                             return;
                         }
                         announceList = new ArrayList<List<String>>(backupURLs.size());
@@ -1240,18 +1240,18 @@ public class I2PSnarkServlet extends BasicServlet {
                         boolean ok = _manager.addTorrent(info, s.getBitField(), torrentFile.getAbsolutePath(), baseFile, true);
                         if (!ok)
                             return;
-                        _manager.addMessage(_("Torrent created for \"{0}\"", baseFile.getName()) + ": " + torrentFile.getAbsolutePath());
+                        _manager.addMessage(_t("Torrent created for \"{0}\"", baseFile.getName()) + ": " + torrentFile.getAbsolutePath());
                         if (announceURL != null && !_manager.util().getOpenTrackers().contains(announceURL))
-                            _manager.addMessage(_("Many I2P trackers require you to register new torrents before seeding - please do so before starting \"{0}\"", baseFile.getName()));
+                            _manager.addMessage(_t("Many I2P trackers require you to register new torrents before seeding - please do so before starting \"{0}\"", baseFile.getName()));
                     } catch (IOException ioe) {
-                        _manager.addMessage(_("Error creating a torrent for \"{0}\"", baseFile.getAbsolutePath()) + ": " + ioe);
+                        _manager.addMessage(_t("Error creating a torrent for \"{0}\"", baseFile.getAbsolutePath()) + ": " + ioe);
                         _log.error("Error creating a torrent", ioe);
                     }
                 } else {
-                    _manager.addMessage(_("Cannot create a torrent for the nonexistent data: {0}", baseFile.getAbsolutePath()));
+                    _manager.addMessage(_t("Cannot create a torrent for the nonexistent data: {0}", baseFile.getAbsolutePath()));
                 }
             } else {
-                _manager.addMessage(_("Error creating torrent - you must enter a file or directory"));
+                _manager.addMessage(_t("Error creating torrent - you must enter a file or directory"));
             }
         } else if ("StopAll".equals(action)) {
             _manager.stopAllTorrents(false);
@@ -1282,7 +1282,7 @@ public class I2PSnarkServlet extends BasicServlet {
 
     /** @since 0.9 */
     private void processTrackerForm(String action, HttpServletRequest req) {
-        if (action.equals(_("Delete selected")) || action.equals(_("Save tracker configuration"))) {
+        if (action.equals(_t("Delete selected")) || action.equals(_t("Save tracker configuration"))) {
             boolean changed = false;
             Map<String, Tracker> trackers = _manager.getTrackerMap();
             List<String> removed = new ArrayList<String>();
@@ -1299,7 +1299,7 @@ public class I2PSnarkServlet extends BasicServlet {
                      Tracker t;
                      if ((t = trackers.remove(k)) != null) {
                         removed.add(t.announceURL);
-                        _manager.addMessage(_("Removed") + ": " + DataHelper.stripHTML(k));
+                        _manager.addMessage(_t("Removed") + ": " + DataHelper.stripHTML(k));
                         changed = true;
                      }
                 } else if (k.startsWith("ttype_")) {
@@ -1331,7 +1331,7 @@ public class I2PSnarkServlet extends BasicServlet {
             if (!priv.equals(oldPriv))
                 _manager.savePrivateTrackers(priv);
 
-        } else if (action.equals(_("Add tracker"))) {
+        } else if (action.equals(_t("Add tracker"))) {
             String name = req.getParameter("tname");
             String hurl = req.getParameter("thurl");
             String aurl = req.getParameter("taurl");
@@ -1354,15 +1354,15 @@ public class I2PSnarkServlet extends BasicServlet {
                         _manager.savePrivateTrackers(newPriv);
                     }
                 } else {
-                    _manager.addMessage(_("Enter valid tracker name and URLs"));
+                    _manager.addMessage(_t("Enter valid tracker name and URLs"));
                 }
             } else {
-                _manager.addMessage(_("Enter valid tracker name and URLs"));
+                _manager.addMessage(_t("Enter valid tracker name and URLs"));
             }
-        } else if (action.equals(_("Restore defaults"))) {
+        } else if (action.equals(_t("Restore defaults"))) {
             _manager.setDefaultTrackerMap();
             _manager.saveOpenTrackers(null);
-            _manager.addMessage(_("Restored default trackers"));
+            _manager.addMessage(_t("Restored default trackers"));
         } else {
             _manager.addMessage("Unknown POST action: \"" + action + '\"');
         }
@@ -1470,12 +1470,12 @@ public class I2PSnarkServlet extends BasicServlet {
         String rowClass = (row % 2 == 0 ? "snarkTorrentEven" : "snarkTorrentOdd");
         String statusString;
         if (snark.isChecking()) {
-            statusString = toThemeImg("stalled", "", _("Checking")) + "</td>" +
-                           "<td class=\"snarkTorrentStatus\">" + _("Checking") + ' ' +
+            statusString = toThemeImg("stalled", "", _t("Checking")) + "</td>" +
+                           "<td class=\"snarkTorrentStatus\">" + _t("Checking") + ' ' +
                            (new DecimalFormat("0.00%")).format(snark.getCheckingProgress());
         } else if (snark.isAllocating()) {
-            statusString = toThemeImg("stalled", "", _("Allocating")) + "</td>" +
-                           "<td class=\"snarkTorrentStatus\">" + _("Allocating");
+            statusString = toThemeImg("stalled", "", _t("Allocating")) + "</td>" +
+                           "<td class=\"snarkTorrentStatus\">" + _t("Allocating");
         } else if (err != null && isRunning && curPeers == 0) {
         //} else if (err != null && curPeers == 0) {
             // Also don't show if seeding... but then we won't see the not-registered error
@@ -1483,14 +1483,14 @@ public class I2PSnarkServlet extends BasicServlet {
             // let's only show this if we have no peers, otherwise PEX and DHT should bail us out, user doesn't care
             //if (isRunning && curPeers > 0 && !showPeers)
             //    statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "trackererror.png\" title=\"" + err + "\"></td>" +
-            //                   "<td class=\"snarkTorrentStatus " + rowClass + "\">" + _("Tracker Error") +
+            //                   "<td class=\"snarkTorrentStatus " + rowClass + "\">" + _t("Tracker Error") +
             //                   ": <a href=\"" + uri + "?p=" + Base64.encode(snark.getInfoHash()) + "\">" +
             //                   curPeers + thinsp(noThinsp) +
             //                   ngettext("1 peer", "{0} peers", knownPeers) + "</a>";
             //else if (isRunning)
             //if (isRunning) {
                 statusString = toThemeImg("trackererror", "", err) + "</td>" +
-                               "<td class=\"snarkTorrentStatus\">" + _("Tracker Error") +
+                               "<td class=\"snarkTorrentStatus\">" + _t("Tracker Error") +
                                ": " + curPeers + thinsp(noThinsp) +
                                ngettext("1 peer", "{0} peers", knownPeers);
             //} else {
@@ -1499,11 +1499,11 @@ public class I2PSnarkServlet extends BasicServlet {
             //    else
             //        err = DataHelper.escapeHTML(err);
             //    statusString = toThemeImg("trackererror", "", err) + "</td>" +
-            //                   "<td class=\"snarkTorrentStatus\">" + _("Tracker Error");
+            //                   "<td class=\"snarkTorrentStatus\">" + _t("Tracker Error");
             //}
         } else if (snark.isStarting()) {
-            statusString = toThemeImg("stalled", "", _("Starting")) + "</td>" +
-                           "<td class=\"snarkTorrentStatus\">" + _("Starting");
+            statusString = toThemeImg("stalled", "", _t("Starting")) + "</td>" +
+                           "<td class=\"snarkTorrentStatus\">" + _t("Starting");
         } else if (remaining == 0 || needed == 0) {  // < 0 means no meta size yet
             // partial complete or seeding
             if (isRunning) {
@@ -1511,11 +1511,11 @@ public class I2PSnarkServlet extends BasicServlet {
                 String txt;
                 if (remaining == 0) {
                     img = "seeding";
-                    txt = _("Seeding");
+                    txt = _t("Seeding");
                 } else {
                     // partial
                     img = "complete";
-                    txt = _("Complete");
+                    txt = _t("Complete");
                 }
                 if (curPeers > 0 && !showPeers)
                     statusString = toThemeImg(img, "", txt) + "</td>" +
@@ -1529,42 +1529,42 @@ public class I2PSnarkServlet extends BasicServlet {
                                ": " + curPeers + thinsp(noThinsp) +
                                ngettext("1 peer", "{0} peers", knownPeers);
             } else {
-                statusString = toThemeImg("complete", "", _("Complete")) + "</td>" +
-                               "<td class=\"snarkTorrentStatus\">" + _("Complete");
+                statusString = toThemeImg("complete", "", _t("Complete")) + "</td>" +
+                               "<td class=\"snarkTorrentStatus\">" + _t("Complete");
             }
         } else {
             if (isRunning && curPeers > 0 && downBps > 0 && !showPeers)
-                statusString = toThemeImg("downloading", "", _("OK")) + "</td>" +
-                               "<td class=\"snarkTorrentStatus\">" + _("OK") +
+                statusString = toThemeImg("downloading", "", _t("OK")) + "</td>" +
+                               "<td class=\"snarkTorrentStatus\">" + _t("OK") +
                                ": <a href=\"" + uri + getQueryString(req, Base64.encode(snark.getInfoHash()), null, null) + "\">" +
                                curPeers + thinsp(noThinsp) +
                                ngettext("1 peer", "{0} peers", knownPeers) + "</a>";
             else if (isRunning && curPeers > 0 && downBps > 0)
-                statusString = toThemeImg("downloading", "", _("OK")) + "</td>" +
-                               "<td class=\"snarkTorrentStatus\">" + _("OK") +
+                statusString = toThemeImg("downloading", "", _t("OK")) + "</td>" +
+                               "<td class=\"snarkTorrentStatus\">" + _t("OK") +
                                ": " + curPeers + thinsp(noThinsp) +
                                ngettext("1 peer", "{0} peers", knownPeers);
             else if (isRunning && curPeers > 0 && !showPeers)
-                statusString = toThemeImg("stalled", "", _("Stalled")) + "</td>" +
-                               "<td class=\"snarkTorrentStatus\">" + _("Stalled") +
+                statusString = toThemeImg("stalled", "", _t("Stalled")) + "</td>" +
+                               "<td class=\"snarkTorrentStatus\">" + _t("Stalled") +
                                ": <a href=\"" + uri + getQueryString(req, Base64.encode(snark.getInfoHash()), null, null) + "\">" +
                                curPeers + thinsp(noThinsp) +
                                ngettext("1 peer", "{0} peers", knownPeers) + "</a>";
             else if (isRunning && curPeers > 0)
-                statusString = toThemeImg("stalled", "", _("Stalled")) + "</td>" +
-                               "<td class=\"snarkTorrentStatus\">" + _("Stalled") +
+                statusString = toThemeImg("stalled", "", _t("Stalled")) + "</td>" +
+                               "<td class=\"snarkTorrentStatus\">" + _t("Stalled") +
                                ": " + curPeers + thinsp(noThinsp) +
                                ngettext("1 peer", "{0} peers", knownPeers);
             else if (isRunning && knownPeers > 0)
-                statusString = toThemeImg("nopeers", "", _("No Peers")) + "</td>" +
-                               "<td class=\"snarkTorrentStatus\">" + _("No Peers") +
+                statusString = toThemeImg("nopeers", "", _t("No Peers")) + "</td>" +
+                               "<td class=\"snarkTorrentStatus\">" + _t("No Peers") +
                                ": 0" + thinsp(noThinsp) + knownPeers ;
             else if (isRunning)
-                statusString = toThemeImg("nopeers", "", _("No Peers")) + "</td>" +
-                               "<td class=\"snarkTorrentStatus\">" + _("No Peers");
+                statusString = toThemeImg("nopeers", "", _t("No Peers")) + "</td>" +
+                               "<td class=\"snarkTorrentStatus\">" + _t("No Peers");
             else
-                statusString = toThemeImg("stopped", "", _("Stopped")) + "</td>" +
-                               "<td class=\"snarkTorrentStatus\">" + _("Stopped");
+                statusString = toThemeImg("stopped", "", _t("Stopped")) + "</td>" +
+                               "<td class=\"snarkTorrentStatus\">" + _t("Stopped");
         }
         
         out.write("<tr class=\"" + rowClass + "\">");
@@ -1593,7 +1593,7 @@ public class I2PSnarkServlet extends BasicServlet {
             // gets us to the details page instead of the file.
             StringBuilder buf = new StringBuilder(128);
             buf.append("<a href=\"").append(encodedBaseName)
-               .append("/\" title=\"").append(_("Torrent details"))
+               .append("/\" title=\"").append(_t("Torrent details"))
                .append("\">");
             out.write(buf.toString());
         }
@@ -1628,9 +1628,9 @@ public class I2PSnarkServlet extends BasicServlet {
                 buf.append('/');
             buf.append("\" title=\"");
             if (isMultiFile)
-                buf.append(_("View files"));
+                buf.append(_t("View files"));
             else
-                buf.append(_("Open file"));
+                buf.append(_t("Open file"));
             buf.append("\">");
             out.write(buf.toString());
         }
@@ -1682,9 +1682,9 @@ public class I2PSnarkServlet extends BasicServlet {
                           getQueryString(req, "", null, null).replace("?", "&amp;") + "\"><img title=\"");
             else
                 out.write("<input type=\"image\" name=\"action_Stop_" + b64 + "\" value=\"foo\" title=\"");
-            out.write(_("Stop the torrent"));
+            out.write(_t("Stop the torrent"));
             out.write("\" src=\"" + _imgPath + "stop.png\" alt=\"");
-            out.write(_("Stop"));
+            out.write(_t("Stop"));
             out.write("\">");
             if (isDegraded)
                 out.write("</a>");
@@ -1697,9 +1697,9 @@ public class I2PSnarkServlet extends BasicServlet {
                               getQueryString(req, "", null, null).replace("?", "&amp;") + "\"><img title=\"");
                 else
                     out.write("<input type=\"image\" name=\"action_Start_" + b64 + "\" value=\"foo\" title=\"");
-                out.write(_("Start the torrent"));
+                out.write(_t("Start the torrent"));
                 out.write("\" src=\"" + _imgPath + "start.png\" alt=\"");
-                out.write(_("Start"));
+                out.write(_t("Start"));
                 out.write("\">");
                 if (isDegraded)
                     out.write("</a>");
@@ -1712,16 +1712,16 @@ public class I2PSnarkServlet extends BasicServlet {
                               getQueryString(req, "", null, null).replace("?", "&amp;") + "\"><img title=\"");
                 else
                     out.write("<input type=\"image\" name=\"action_Remove_" + b64 + "\" value=\"foo\" title=\"");
-                out.write(_("Remove the torrent from the active list, deleting the .torrent file"));
+                out.write(_t("Remove the torrent from the active list, deleting the .torrent file"));
                 out.write("\" onclick=\"if (!confirm('");
                 // Can't figure out how to escape double quotes inside the onclick string.
                 // Single quotes in translate strings with parameters must be doubled.
                 // Then the remaining single quote must be escaped
-                out.write(_("Are you sure you want to delete the file \\''{0}\\'' (downloaded data will not be deleted) ?",
+                out.write(_t("Are you sure you want to delete the file \\''{0}\\'' (downloaded data will not be deleted) ?",
                             escapeJSString(snark.getName())));
                 out.write("')) { return false; }\"");
                 out.write(" src=\"" + _imgPath + "remove.png\" alt=\"");
-                out.write(_("Remove"));
+                out.write(_t("Remove"));
                 out.write("\">");
                 if (isDegraded)
                     out.write("</a>");
@@ -1734,16 +1734,16 @@ public class I2PSnarkServlet extends BasicServlet {
                           getQueryString(req, "", null, null).replace("?", "&amp;") + "\"><img title=\"");
             else
                 out.write("<input type=\"image\" name=\"action_Delete_" + b64 + "\" value=\"foo\" title=\"");
-            out.write(_("Delete the .torrent file and the associated data file(s)"));
+            out.write(_t("Delete the .torrent file and the associated data file(s)"));
             out.write("\" onclick=\"if (!confirm('");
             // Can't figure out how to escape double quotes inside the onclick string.
             // Single quotes in translate strings with parameters must be doubled.
             // Then the remaining single quote must be escaped
-            out.write(_("Are you sure you want to delete the torrent \\''{0}\\'' and all downloaded data?",
+            out.write(_t("Are you sure you want to delete the torrent \\''{0}\\'' and all downloaded data?",
                         escapeJSString(fullBasename)));
             out.write("')) { return false; }\"");
             out.write(" src=\"" + _imgPath + "delete.png\" alt=\"");
-            out.write(_("Delete"));
+            out.write(_t("Delete"));
             out.write("\">");
             if (isDegraded)
                 out.write("</a>");
@@ -1763,7 +1763,7 @@ public class I2PSnarkServlet extends BasicServlet {
                 String ch = pid != null ? pid.toString().substring(0, 4) : "????";
                 String client;
                 if ("AwMD".equals(ch))
-                    client = _("I2PSnark");
+                    client = _t("I2PSnark");
                 else if ("BFJT".equals(ch))
                     client = "I2PRufus";
                 else if ("TTMt".equals(ch))
@@ -1779,7 +1779,7 @@ public class I2PSnarkServlet extends BasicServlet {
                 else if ("LUtU".equals(ch))
                     client = "KTorrent" + getAzVersion(pid.getID());
                 else
-                    client = _("Unknown") + " (" + ch + ')';
+                    client = _t("Unknown") + " (" + ch + ')';
                 out.write(client + "&nbsp;&nbsp;<tt>" + peer.toString().substring(5, 9)+ "</tt>");
                 if (showDebug)
                     out.write(" inactive " + (peer.getInactiveTime() / 1000) + "s");
@@ -1791,7 +1791,7 @@ public class I2PSnarkServlet extends BasicServlet {
                 if (isValid) {
                     pct = (float) (100.0 * peer.completed() / meta.getPieces());
                     if (pct >= 100.0)
-                        out.write(_("Seed"));
+                        out.write(_t("Seed"));
                     else {
                         String ps = String.valueOf(pct);
                         if (ps.length() > 5)
@@ -1814,9 +1814,9 @@ public class I2PSnarkServlet extends BasicServlet {
                     } else {
                         out.write("<span class=\"choked\"><a title=\"");
                         if (!peer.isInteresting())
-                            out.write(_("Uninteresting (The peer has no pieces we need)"));
+                            out.write(_t("Uninteresting (The peer has no pieces we need)"));
                         else
-                            out.write(_("Choked (The peer is not allowing us to request pieces)"));
+                            out.write(_t("Choked (The peer is not allowing us to request pieces)"));
                         out.write("\">");
                         out.write(formatSize(peer.getDownloadRate()) + "ps</a></span>");
                     }
@@ -1836,9 +1836,9 @@ public class I2PSnarkServlet extends BasicServlet {
                     } else {
                         out.write("<span class=\"choked\"><a title=\"");
                         if (!peer.isInterested())
-                            out.write(_("Uninterested (We have no pieces the peer needs)"));
+                            out.write(_t("Uninterested (We have no pieces the peer needs)"));
                         else
-                            out.write(_("Choking (We are not allowing the peer to request pieces)"));
+                            out.write(_t("Choking (We are not allowing the peer to request pieces)"));
                         out.write("\">");
                         out.write(formatSize(peer.getUploadRate()) + "ps</a></span>");
                     }
@@ -1954,7 +1954,7 @@ public class I2PSnarkServlet extends BasicServlet {
                 StringBuilder buf = new StringBuilder(128);
                 buf.append("<a href=\"").append(baseURL).append("details.php?dllist=1&amp;filelist=1&amp;info_hash=")
                    .append(TrackerClient.urlencode(infohash))
-                   .append("\" title=\"").append(_("Details at {0} tracker", name)).append("\" target=\"_blank\">");
+                   .append("\" title=\"").append(_t("Details at {0} tracker", name)).append("\" target=\"_blank\">");
                 return buf.toString();
             }
         }
@@ -1971,7 +1971,7 @@ public class I2PSnarkServlet extends BasicServlet {
         if (linkUrl != null) {
             StringBuilder buf = new StringBuilder(128);
             buf.append(linkUrl);
-            toThemeImg(buf, "details", _("Info"), "");
+            toThemeImg(buf, "details", _t("Info"), "");
             buf.append("</a>");
             return buf.toString();
         }
@@ -2044,31 +2044,31 @@ public class I2PSnarkServlet extends BasicServlet {
         out.write("<div class=\"addtorrentsection\"><span class=\"snarkConfigTitle\">");
         out.write(toThemeImg("add"));
         out.write(' ');
-        out.write(_("Add Torrent"));
+        out.write(_t("Add Torrent"));
 
         out.write("</span><hr>\n<table border=\"0\"><tr><td>");
-        out.write(_("From URL"));
+        out.write(_t("From URL"));
         out.write(":<td><input type=\"text\" name=\"nofilter_newURL\" size=\"85\" value=\"" + newURL + "\" spellcheck=\"false\"");
         out.write(" title=\"");
-        out.write(_("Enter the torrent file download URL (I2P only), magnet link, maggot link, or info hash"));
+        out.write(_t("Enter the torrent file download URL (I2P only), magnet link, maggot link, or info hash"));
         out.write("\"> \n");
         // not supporting from file at the moment, since the file name passed isn't always absolute (so it may not resolve)
         //out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>");
         out.write("<input type=\"submit\" class=\"add\" value=\"");
-        out.write(_("Add torrent"));
+        out.write(_t("Add torrent"));
         out.write("\" name=\"foo\" ><br>\n" +
 
                   "<tr><td>");
-        out.write(_("Data dir"));
+        out.write(_t("Data dir"));
         out.write(":<td><input type=\"text\" name=\"nofilter_newDir\" size=\"85\" value=\"\" spellcheck=\"false\"");
         out.write(" title=\"");
-        out.write(_("Enter the directory to save the data in (default {0})", _manager.getDataDir().getAbsolutePath()));
+        out.write(_t("Enter the directory to save the data in (default {0})", _manager.getDataDir().getAbsolutePath()));
         out.write("\"></td></tr>\n");
 
         out.write("<tr><td>&nbsp;<td><span class=\"snarkAddInfo\">");
-        out.write(_("You can also copy .torrent files to: {0}.", "<code>" + _manager.getDataDir().getAbsolutePath() + "</code>"));
+        out.write(_t("You can also copy .torrent files to: {0}.", "<code>" + _manager.getDataDir().getAbsolutePath() + "</code>"));
         out.write("\n");
-        out.write(_("Removing a .torrent will cause it to stop."));
+        out.write(_t("Removing a .torrent will cause it to stop."));
         out.write("<br></span></table>\n");
         out.write("</div></form></div>");  
     }
@@ -2081,24 +2081,24 @@ public class I2PSnarkServlet extends BasicServlet {
         out.write("<span class=\"snarkConfigTitle\">");
         out.write(toThemeImg("create"));
         out.write(' ');
-        out.write(_("Create Torrent"));
+        out.write(_t("Create Torrent"));
         out.write("</span><hr>\n<table border=\"0\"><tr><td>");
         //out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>\n");
-        out.write(_("Data to seed"));
+        out.write(_t("Data to seed"));
         out.write(":<td>"
                   + "<input type=\"text\" name=\"nofilter_baseFile\" size=\"85\" value=\""
                   + "\" spellcheck=\"false\" title=\"");
-        out.write(_("File or directory to seed (full path or within the directory {0} )",
+        out.write(_t("File or directory to seed (full path or within the directory {0} )",
                     _manager.getDataDir().getAbsolutePath() + File.separatorChar));
         out.write("\" ><tr><td>\n");
-        out.write(_("Trackers"));
+        out.write(_t("Trackers"));
         out.write(":<td><table style=\"width: 30%;\"><tr><td></td><td align=\"center\">");
-        out.write(_("Primary"));
+        out.write(_t("Primary"));
         out.write("</td><td align=\"center\">");
-        out.write(_("Alternates"));
+        out.write(_t("Alternates"));
         out.write("</td><td rowspan=\"0\">" +
                   " <input type=\"submit\" class=\"create\" value=\"");
-        out.write(_("Create torrent"));
+        out.write(_t("Create torrent"));
         out.write("\" name=\"foo\" >" +
                   "</td></tr>\n");
         for (Tracker t : sortedTrackers) {
@@ -2116,16 +2116,16 @@ public class I2PSnarkServlet extends BasicServlet {
             out.write("\" value=\"foo\"></td></tr>\n");
         }
         out.write("<tr><td><i>");
-        out.write(_("none"));
+        out.write(_t("none"));
         out.write("</i></td><td align=\"center\"><input type=\"radio\" name=\"announceURL\" value=\"none\"");
         if (_lastAnnounceURL == null)
             out.write(" checked");
         out.write("></td><td></td></tr></table>\n");
         // make the user add a tracker on the config form now
-        //out.write(_("or"));
+        //out.write(_t("or"));
         //out.write("&nbsp;<input type=\"text\" name=\"announceURLOther\" size=\"57\" value=\"http://\" " +
         //          "title=\"");
-        //out.write(_("Specify custom tracker announce URL"));
+        //out.write(_t("Specify custom tracker announce URL"));
         //out.write("\" > " +
         out.write("</td></tr>" +
                   "</table>\n" +
@@ -2149,32 +2149,32 @@ public class I2PSnarkServlet extends BasicServlet {
         out.write("<span class=\"snarkConfigTitle\">");
         out.write(toThemeImg("config"));
         out.write(' ');
-        out.write(_("Configuration"));
+        out.write(_t("Configuration"));
         out.write("</span><hr>\n"   +
                   "<table border=\"0\"><tr><td>");
 
-        out.write(_("Data directory"));
+        out.write(_t("Data directory"));
         out.write(": <td><input name=\"nofilter_dataDir\" size=\"80\" value=\"" +
                   DataHelper.escapeHTML(dataDir) + "\" spellcheck=\"false\"></td>\n" +
 
                   "<tr><td>");
-        out.write(_("Files readable by all"));
+        out.write(_t("Files readable by all"));
         out.write(": <td><input type=\"checkbox\" class=\"optbox\" name=\"filesPublic\" value=\"true\" " 
                   + (filesPublic ? "checked " : "") 
                   + "title=\"");
-        out.write(_("If checked, other users may access the downloaded files"));
+        out.write(_t("If checked, other users may access the downloaded files"));
         out.write("\" >" +
 
                   "<tr><td>");
-        out.write(_("Auto start torrents"));
+        out.write(_t("Auto start torrents"));
         out.write(": <td><input type=\"checkbox\" class=\"optbox\" name=\"autoStart\" value=\"true\" " 
                   + (autoStart ? "checked " : "") 
                   + "title=\"");
-        out.write(_("If checked, automatically start torrents that are added"));
+        out.write(_t("If checked, automatically start torrents that are added"));
         out.write("\" >" +
 
                   "<tr><td>");
-        out.write(_("Theme"));
+        out.write(_t("Theme"));
         out.write(": <td><select name='theme'>");
         String theme = _manager.getTheme();
         String[] themes = _manager.getThemes();
@@ -2188,7 +2188,7 @@ public class I2PSnarkServlet extends BasicServlet {
         out.write("</select>\n" +
 
                   "<tr><td>");
-        out.write(_("Refresh time"));
+        out.write(_t("Refresh time"));
         out.write(": <td><select name=\"refreshDelay\">");
         int delay = _manager.getRefreshDelaySeconds();
         for (int i = 0; i < times.length; i++) {
@@ -2201,21 +2201,21 @@ public class I2PSnarkServlet extends BasicServlet {
             if (times[i] > 0)
                 out.write(DataHelper.formatDuration2(times[i] * 1000));
             else
-                out.write(_("Never"));
+                out.write(_t("Never"));
             out.write("</option>\n");
         }
         out.write("</select><br>" +
 
                   "<tr><td>");
-        out.write(_("Startup delay"));
+        out.write(_t("Startup delay"));
         out.write(": <td><input name=\"startupDelay\" size=\"4\" class=\"r\" value=\"" + _manager.util().getStartupDelay() + "\"> ");
-        out.write(_("minutes"));
+        out.write(_t("minutes"));
         out.write("<br>\n" +
 
                   "<tr><td>");
-        out.write(_("Page size"));
+        out.write(_t("Page size"));
         out.write(": <td><input name=\"pageSize\" size=\"4\" maxlength=\"6\" class=\"r\" value=\"" + _manager.getPageSize() + "\"> ");
-        out.write(_("torrents"));
+        out.write(_t("torrents"));
         out.write("<br>\n"); 
 
 
@@ -2239,39 +2239,39 @@ public class I2PSnarkServlet extends BasicServlet {
         out.write("</select><br>\n");
 */
         out.write("<tr><td>");
-        out.write(_("Total uploader limit"));
+        out.write(_t("Total uploader limit"));
         out.write(": <td><input type=\"text\" name=\"upLimit\" class=\"r\" value=\""
                   + _manager.util().getMaxUploaders() + "\" size=\"4\" maxlength=\"3\" > ");
-        out.write(_("peers"));
+        out.write(_t("peers"));
         out.write("<br>\n" +
 
                   "<tr><td>");
-        out.write(_("Up bandwidth limit"));
+        out.write(_t("Up bandwidth limit"));
         out.write(": <td><input type=\"text\" name=\"upBW\" class=\"r\" value=\""
                   + _manager.util().getMaxUpBW() + "\" size=\"4\" maxlength=\"4\" > KBps <i>");
-        out.write(_("Half available bandwidth recommended."));
+        out.write(_t("Half available bandwidth recommended."));
         out.write(" [<a href=\"/config.jsp\" target=\"blank\">");
-        out.write(_("View or change router bandwidth"));
+        out.write(_t("View or change router bandwidth"));
         out.write("</a>]</i><br>\n" +
         
                   "<tr><td>");
-        out.write(_("Use open trackers also"));
+        out.write(_t("Use open trackers also"));
         out.write(": <td><input type=\"checkbox\" class=\"optbox\" name=\"useOpenTrackers\" value=\"true\" " 
                   + (useOpenTrackers ? "checked " : "") 
                   + "title=\"");
-        out.write(_("If checked, announce torrents to open trackers as well as the tracker listed in the torrent file"));
+        out.write(_t("If checked, announce torrents to open trackers as well as the tracker listed in the torrent file"));
         out.write("\" ></td></tr>\n" +
         
                   "<tr><td>");
-        out.write(_("Enable DHT"));
+        out.write(_t("Enable DHT"));
         out.write(": <td><input type=\"checkbox\" class=\"optbox\" name=\"useDHT\" value=\"true\" " 
                   + (useDHT ? "checked " : "") 
                   + "title=\"");
-        out.write(_("If checked, use DHT"));
+        out.write(_t("If checked, use DHT"));
         out.write("\" ></td></tr>\n");
 
         //          "<tr><td>");
-        //out.write(_("Open tracker announce URLs"));
+        //out.write(_t("Open tracker announce URLs"));
         //out.write(": <td><input type=\"text\" name=\"openTrackers\" value=\""
         //          + openTrackers + "\" size=\"50\" ><br>\n");
 
@@ -2283,13 +2283,13 @@ public class I2PSnarkServlet extends BasicServlet {
 
         Map<String, String> options = new TreeMap<String, String>(_manager.util().getI2CPOptions());
         out.write("<tr><td>");
-        out.write(_("Inbound Settings"));
+        out.write(_t("Inbound Settings"));
         out.write(":<td>");
         out.write(renderOptions(1, 10, 3, options.remove("inbound.quantity"), "inbound.quantity", TUNNEL));
         out.write("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
         out.write(renderOptions(0, 4, 3, options.remove("inbound.length"), "inbound.length", HOP));
         out.write("<tr><td>");
-        out.write(_("Outbound Settings"));
+        out.write(_t("Outbound Settings"));
         out.write(":<td>");
         out.write(renderOptions(1, 10, 3, options.remove("outbound.quantity"), "outbound.quantity", TUNNEL));
         out.write("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
@@ -2297,12 +2297,12 @@ public class I2PSnarkServlet extends BasicServlet {
 
         if (!_context.isRouterContext()) {
             out.write("<tr><td>");
-            out.write(_("I2CP host"));
+            out.write(_t("I2CP host"));
             out.write(": <td><input type=\"text\" name=\"i2cpHost\" value=\"" 
                       + _manager.util().getI2CPHost() + "\" size=\"15\" > " +
 
                       "<tr><td>");
-            out.write(_("I2CP port"));
+            out.write(_t("I2CP port"));
             out.write(": <td><input type=\"text\" name=\"i2cpPort\" class=\"r\" value=\"" +
                       + _manager.util().getI2CPPort() + "\" size=\"5\" maxlength=\"5\" > <br>\n");
         }
@@ -2317,12 +2317,12 @@ public class I2PSnarkServlet extends BasicServlet {
             opts.append(key).append('=').append(val).append(' ');
         }
         out.write("<tr><td>");
-        out.write(_("I2CP options"));
+        out.write(_t("I2CP options"));
         out.write(": <td><textarea name=\"i2cpOpts\" cols=\"60\" rows=\"1\" wrap=\"off\" spellcheck=\"false\" >"
                   + opts.toString() + "</textarea><br>\n" +
                   "<tr><td colspan=\"2\">&nbsp;\n" +  // spacer
                   "<tr><td>&nbsp;<td><input type=\"submit\" class=\"accept\" value=\"");
-        out.write(_("Save configuration"));
+        out.write(_t("Save configuration"));
         out.write("\" name=\"foo\" >\n" +
                   "<tr><td colspan=\"2\">&nbsp;\n" +  // spacer
                   "</table></div></div></form>");
@@ -2337,22 +2337,22 @@ public class I2PSnarkServlet extends BasicServlet {
         buf.append("<span class=\"snarkConfigTitle\">");
         toThemeImg(buf, "config");
         buf.append(' ');
-        buf.append(_("Trackers"));
+        buf.append(_t("Trackers"));
         buf.append("</span><hr>\n"   +
                    "<table class=\"trackerconfig\"><tr><th>")
-           //.append(_("Remove"))
+           //.append(_t("Remove"))
            .append("</th><th>")
-           .append(_("Name"))
+           .append(_t("Name"))
            .append("</th><th>")
-           .append(_("Website URL"))
+           .append(_t("Website URL"))
            .append("</th><th>")
-           .append(_("Standard"))
+           .append(_t("Standard"))
            .append("</th><th>")
-           .append(_("Open"))
+           .append(_t("Open"))
            .append("</th><th>")
-           .append(_("Private"))
+           .append(_t("Private"))
            .append("</th><th>")
-           .append(_("Announce URL"))
+           .append(_t("Announce URL"))
            .append("</th></tr>\n");
         List<String> openTrackers = _manager.util().getOpenTrackers();
         List<String> privateTrackers = _manager.getPrivateTrackers();
@@ -2364,7 +2364,7 @@ public class I2PSnarkServlet extends BasicServlet {
             boolean isKnownOpen = _manager.util().isKnownOpenTracker(t.announceURL);
             boolean isOpen = isKnownOpen || openTrackers.contains(t.announceURL);
             buf.append("<tr><td><input type=\"checkbox\" class=\"optbox\" name=\"delete_")
-               .append(name).append("\" title=\"").append(_("Delete")).append("\">" +
+               .append(name).append("\" title=\"").append(_t("Delete")).append("\">" +
                        "</td><td>").append(name)
                .append("</td><td>").append(urlify(homeURL, 35))
                .append("</td><td><input type=\"radio\" class=\"optbox\" value=\"0\" name=\"ttype_")
@@ -2396,7 +2396,7 @@ public class I2PSnarkServlet extends BasicServlet {
                .append("</td></tr>\n");
         }
         buf.append("<tr><td><b>")
-           .append(_("Add")).append(":</b></td>" +
+           .append(_t("Add")).append(":</b></td>" +
                    "<td><input type=\"text\" class=\"trackername\" name=\"tname\" spellcheck=\"false\"></td>" +
                    "<td><input type=\"text\" class=\"trackerhome\" name=\"thurl\" spellcheck=\"false\"></td>" +
                    "<td><input type=\"radio\" class=\"optbox\" value=\"0\" name=\"add_tracker_type\" checked=\"checked\"></td>" +
@@ -2405,12 +2405,12 @@ public class I2PSnarkServlet extends BasicServlet {
                    "<td><input type=\"text\" class=\"trackerannounce\" name=\"taurl\" spellcheck=\"false\"></td></tr>\n" +
                    "<tr><td colspan=\"7\">&nbsp;</td></tr>\n" +  // spacer
                    "<tr><td colspan=\"2\"></td><td colspan=\"5\">\n" +
-                   "<input type=\"submit\" name=\"taction\" class=\"default\" value=\"").append(_("Add tracker")).append("\">\n" +
-                   "<input type=\"submit\" name=\"taction\" class=\"delete\" value=\"").append(_("Delete selected")).append("\">\n" +
-                   "<input type=\"submit\" name=\"taction\" class=\"add\" value=\"").append(_("Add tracker")).append("\">\n" +
-                   "<input type=\"submit\" name=\"taction\" class=\"accept\" value=\"").append(_("Save tracker configuration")).append("\">\n" +
-                   // "<input type=\"reset\" class=\"cancel\" value=\"").append(_("Cancel")).append("\">\n" +
-                   "<input type=\"submit\" name=\"taction\" class=\"reload\" value=\"").append(_("Restore defaults")).append("\">\n" +
+                   "<input type=\"submit\" name=\"taction\" class=\"default\" value=\"").append(_t("Add tracker")).append("\">\n" +
+                   "<input type=\"submit\" name=\"taction\" class=\"delete\" value=\"").append(_t("Delete selected")).append("\">\n" +
+                   "<input type=\"submit\" name=\"taction\" class=\"add\" value=\"").append(_t("Add tracker")).append("\">\n" +
+                   "<input type=\"submit\" name=\"taction\" class=\"accept\" value=\"").append(_t("Save tracker configuration")).append("\">\n" +
+                   // "<input type=\"reset\" class=\"cancel\" value=\"").append(_t("Cancel")).append("\">\n" +
+                   "<input type=\"submit\" name=\"taction\" class=\"reload\" value=\"").append(_t("Restore defaults")).append("\">\n" +
                    "</td></tr>" +
                    "<tr><td colspan=\"7\">&nbsp;</td></tr>\n" +  // spacer
                    "</table></div></div></form>\n");
@@ -2422,7 +2422,7 @@ public class I2PSnarkServlet extends BasicServlet {
                   "<span class=\"snarkConfigTitle\"><a href=\"configure\">");
         out.write(toThemeImg("config"));
         out.write(' ');
-        out.write(_("Configuration"));
+        out.write(_t("Configuration"));
         out.write("</a></span></span></div>\n");
     }
 
@@ -2439,7 +2439,7 @@ public class I2PSnarkServlet extends BasicServlet {
             String trackerURL = magnet.getTrackerURL();
             _manager.addMagnet(name, ih, trackerURL, true, dataDir);
         } catch (IllegalArgumentException iae) {
-            _manager.addMessage(_("Invalid magnet URL {0}", url));
+            _manager.addMessage(_t("Invalid magnet URL {0}", url));
         }
     }
 
@@ -2474,17 +2474,17 @@ public class I2PSnarkServlet extends BasicServlet {
     }
 
     /** translate */
-    private String _(String s) {
+    private String _t(String s) {
         return _manager.util().getString(s);
     }
 
     /** translate */
-    private String _(String s, Object o) {
+    private String _t(String s, Object o) {
         return _manager.util().getString(s, o);
     }
 
     /** translate */
-    private String _(String s, Object o, Object o2) {
+    private String _t(String s, Object o, Object o2) {
         return _manager.util().getString(s, o, o2);
     }
 
@@ -2660,7 +2660,7 @@ public class I2PSnarkServlet extends BasicServlet {
         if (title.endsWith("/"))
             title = title.substring(0, title.length() - 1);
         String directory = title;
-        title = _("Torrent") + ": " + DataHelper.escapeHTML(title);
+        title = _t("Torrent") + ": " + DataHelper.escapeHTML(title);
         buf.append(title);
         buf.append("</TITLE>\n").append(HEADER_A).append(_themePath).append(HEADER_B)
             .append("<link rel=\"shortcut icon\" href=\"" + _themePath + "favicon.ico\">\n");
@@ -2674,7 +2674,7 @@ public class I2PSnarkServlet extends BasicServlet {
         toThemeImg(buf, "arrow_refresh");
         buf.append("&nbsp;&nbsp;");
         if (_contextName.equals(DEFAULT_NAME))
-            buf.append(_("I2PSnark"));
+            buf.append(_t("I2PSnark"));
         else
             buf.append(_contextName);
         buf.append("</a></div></center>\n");
@@ -2694,7 +2694,7 @@ public class I2PSnarkServlet extends BasicServlet {
             // first table - torrent info
             buf.append("<table class=\"snarkTorrentInfo\">\n");
             buf.append("<tr><th><b>")
-               .append(_("Torrent"))
+               .append(_t("Torrent"))
                .append(":</b> ")
                .append(DataHelper.escapeHTML(snark.getBaseName()))
                .append("</th></tr>\n");
@@ -2704,7 +2704,7 @@ public class I2PSnarkServlet extends BasicServlet {
             buf.append("<tr><td>");
             toThemeImg(buf, "file");
             buf.append("&nbsp;<b>")
-               .append(_("Torrent file"))
+               .append(_t("Torrent file"))
                .append(":</b> <a href=\"").append(_contextPath).append('/').append(baseName).append("\">")
                .append(DataHelper.escapeHTML(fullPath))
                .append("</a></td></tr>\n");
@@ -2712,7 +2712,7 @@ public class I2PSnarkServlet extends BasicServlet {
                 buf.append("<tr><td>");
                 toThemeImg(buf, "file");
                 buf.append("&nbsp;<b>")
-                   .append(_("Data location"))
+                   .append(_t("Data location"))
                    .append(":</b> ")
                    .append(DataHelper.escapeHTML(snark.getStorage().getBase().getPath()))
                    .append("</td></tr>\n");
@@ -2721,7 +2721,7 @@ public class I2PSnarkServlet extends BasicServlet {
             buf.append("<tr><td>");
             toThemeImg(buf, "details");
             buf.append("&nbsp;<b>")
-               .append(_("Info hash"))
+               .append(_t("Info hash"))
                .append(":</b> ")
                .append(hex.toUpperCase(Locale.US))
                .append("</td></tr>\n");
@@ -2740,7 +2740,7 @@ public class I2PSnarkServlet extends BasicServlet {
                         buf.append(trackerLink);
                     else
                         toThemeImg(buf, "details");
-                    buf.append(" <b>").append(_("Primary Tracker")).append(":</b> ");
+                    buf.append(" <b>").append(_t("Primary Tracker")).append(":</b> ");
                     buf.append(getShortTrackerLink(announce, snark.getInfoHash()));
                     buf.append("</td></tr>");
                 }
@@ -2749,7 +2749,7 @@ public class I2PSnarkServlet extends BasicServlet {
                     buf.append("<tr><td>");
                     toThemeImg(buf, "details");
                     buf.append(" <b>")
-                       .append(_("Tracker List")).append(":</b> ");
+                       .append(_t("Tracker List")).append(":</b> ");
                     for (List<String> alist2 : alist) {
                         buf.append('[');
                         boolean more = false;
@@ -2774,7 +2774,7 @@ public class I2PSnarkServlet extends BasicServlet {
                     buf.append("<tr><td>");
                     toThemeImg(buf, "details");
                     buf.append(" <b>")
-                       .append(_("Comment")).append(":</b> ")
+                       .append(_t("Comment")).append(":</b> ")
                        .append(DataHelper.stripHTML(com))
                        .append("</td></tr>\n");
                 }
@@ -2788,7 +2788,7 @@ public class I2PSnarkServlet extends BasicServlet {
                     buf.append("<tr><td>");
                     toThemeImg(buf, "details");
                     buf.append(" <b>")
-                       .append(_("Created")).append(":</b> ")
+                       .append(_t("Created")).append(":</b> ")
                        .append(date)
                        .append("</td></tr>\n");
                 }
@@ -2799,7 +2799,7 @@ public class I2PSnarkServlet extends BasicServlet {
                     buf.append("<tr><td>");
                     toThemeImg(buf, "details");
                     buf.append(" <b>")
-                       .append(_("Created By")).append(":</b> ")
+                       .append(_t("Created By")).append(":</b> ")
                        .append(DataHelper.stripHTML(cby))
                        .append("</td></tr>\n");
                 }
@@ -2809,7 +2809,7 @@ public class I2PSnarkServlet extends BasicServlet {
                     buf.append("<tr><td>");
                     toThemeImg(buf, "details");
                     buf.append(" <b>")
-                       .append(_("Added")).append(":</b> ")
+                       .append(_t("Added")).append(":</b> ")
                        .append(date)
                        .append("</td></tr>\n");
                 }
@@ -2818,7 +2818,7 @@ public class I2PSnarkServlet extends BasicServlet {
                     buf.append("<tr><td>");
                     toThemeImg(buf, "details");
                     buf.append(" <b>")
-                       .append(_("Completed")).append(":</b> ")
+                       .append(_t("Completed")).append(":</b> ")
                        .append(date)
                        .append("</td></tr>\n");
                 }
@@ -2830,7 +2830,7 @@ public class I2PSnarkServlet extends BasicServlet {
                 if (announce != null)
                     buf.append("&amp;tr=").append(announce);
                 buf.append("\">")
-                   .append(toImg("magnet", _("Magnet link")))
+                   .append(toImg("magnet", _t("Magnet link")))
                    .append("</a> <b>Magnet:</b> <a href=\"")
                    .append(MagnetURI.MAGNET_FULL).append(hex);
                 if (announce != null)
@@ -2843,18 +2843,18 @@ public class I2PSnarkServlet extends BasicServlet {
                    .append("</td></tr>\n");
             } else {
                 buf.append("<tr><td>")
-                   .append(_("Private torrent"))
+                   .append(_t("Private torrent"))
                    .append("</td></tr>\n");
             }
 
             // We don't have the hash of the torrent file
-            //buf.append("<tr><td>").append(_("Maggot link")).append(": <a href=\"").append(MAGGOT).append(hex).append(':').append(hex).append("\">")
+            //buf.append("<tr><td>").append(_t("Maggot link")).append(": <a href=\"").append(MAGGOT).append(hex).append(':').append(hex).append("\">")
             //   .append(MAGGOT).append(hex).append(':').append(hex).append("</a></td></tr>");
 
             buf.append("<tr><td>");
             toThemeImg(buf, "size");
             buf.append("&nbsp;<b>")
-               .append(_("Size"))
+               .append(_t("Size"))
                .append(":</b> ")
                .append(formatSize(snark.getTotalLength()));
             int pieces = snark.getPieces();
@@ -2863,16 +2863,16 @@ public class I2PSnarkServlet extends BasicServlet {
             toThemeImg(buf, "head_rx");
             buf.append("&nbsp;<b>");
             if (completion < 1.0)
-                buf.append(_("Completion"))
+                buf.append(_t("Completion"))
                    .append(":</b> ")
                    .append((new DecimalFormat("0.00%")).format(completion));
             else
-                buf.append(_("Complete")).append("</b>");
+                buf.append(_t("Complete")).append("</b>");
             // up ratio
             buf.append("&nbsp;");
             toThemeImg(buf, "head_tx");
             buf.append("&nbsp;<b>")
-               .append(_("Upload ratio"))
+               .append(_t("Upload ratio"))
                .append(":</b> ");
             long uploaded = snark.getUploaded();
             if (uploaded > 0) {
@@ -2892,7 +2892,7 @@ public class I2PSnarkServlet extends BasicServlet {
                 buf.append("&nbsp;");
                 toThemeImg(buf, "head_rx");
                 buf.append("&nbsp;<b>")
-                   .append(_("Remaining"))
+                   .append(_t("Remaining"))
                    .append(":</b> ")
                    .append(formatSize(needed));
             }
@@ -2902,20 +2902,20 @@ public class I2PSnarkServlet extends BasicServlet {
                 buf.append("&nbsp;");
                 toThemeImg(buf, "file");
                 buf.append("&nbsp;<b>")
-                   .append(_("Files"))
+                   .append(_t("Files"))
                    .append(":</b> ")
                    .append(fileCount);
             }
             buf.append("&nbsp;");
             toThemeImg(buf, "file");
             buf.append("&nbsp;<b>")
-               .append(_("Pieces"))
+               .append(_t("Pieces"))
                .append(":</b> ")
                .append(pieces);
             buf.append("&nbsp;");
             toThemeImg(buf, "file");
             buf.append("&nbsp;<b>")
-               .append(_("Piece size"))
+               .append(_t("Piece size"))
                .append(":</b> ")
                .append(formatSize(snark.getPieceLength(0)))
                .append("</td></tr>\n");
@@ -2925,22 +2925,22 @@ public class I2PSnarkServlet extends BasicServlet {
                 buf.append("<tr><td>");
                 toThemeImg(buf, "file");
                 if (snark.isChecking()) {
-                    buf.append("&nbsp;<b>").append(_("Checking")).append("&hellip; ")
+                    buf.append("&nbsp;<b>").append(_t("Checking")).append("&hellip; ")
                        .append((new DecimalFormat("0.00%")).format(snark.getCheckingProgress()))
                        .append("&nbsp;&nbsp;&nbsp;<a href=\"").append(base).append("\">")
-                       .append(_("Refresh page for results")).append("</a>");
+                       .append(_t("Refresh page for results")).append("</a>");
                 } else if (snark.isStarting()) {
-                    buf.append("&nbsp;<b>").append(_("Starting")).append("&hellip;</b>");
+                    buf.append("&nbsp;<b>").append(_t("Starting")).append("&hellip;</b>");
                 } else if (snark.isAllocating()) {
-                    buf.append("&nbsp;<b>").append(_("Allocating")).append("&hellip;</b>");
+                    buf.append("&nbsp;<b>").append(_t("Allocating")).append("&hellip;</b>");
                 } else {
                     boolean isRunning = !snark.isStopped();
                     buf.append(" <input type=\"submit\" value=\"");
                     if (isRunning)
-                        buf.append(_("Stop")).append("\" name=\"stop\" class=\"stoptorrent\">\n");
+                        buf.append(_t("Stop")).append("\" name=\"stop\" class=\"stoptorrent\">\n");
                     else
-                        buf.append(_("Start")).append("\" name=\"start\" class=\"starttorrent\">\n");
-                    buf.append("&nbsp;&nbsp;&nbsp;<input type=\"submit\" name=\"recheck\" value=\"").append(_("Force Recheck"));
+                        buf.append(_t("Start")).append("\" name=\"start\" class=\"starttorrent\">\n");
+                    buf.append("&nbsp;&nbsp;&nbsp;<input type=\"submit\" name=\"recheck\" value=\"").append(_t("Force Recheck"));
                     if (isRunning)
                         buf.append("\" class=\"disabled\" disabled=\"disabled\">\n");
                     else
@@ -3001,7 +3001,7 @@ public class I2PSnarkServlet extends BasicServlet {
         buf.append("<table class=\"snarkDirInfo\"><thead>\n");
         buf.append("<tr>\n")
            .append("<th colspan=2>");
-        String tx = _("Directory");
+        String tx = _t("Directory");
         // cycle through sort by name or type
         String sort;
         boolean isTypeSort = false;
@@ -3021,7 +3021,7 @@ public class I2PSnarkServlet extends BasicServlet {
                .append(getQueryString(sort)).append("\">");
         }
         toThemeImg(buf, "file", tx,
-                   showSort ? _("Sort by {0}", (isTypeSort ? _("File type") : _("Name")))
+                   showSort ? _t("Sort by {0}", (isTypeSort ? _t("File type") : _t("Name")))
                             : tx + ": " + directory);
         if (showSort)
             buf.append("</a>");
@@ -3036,9 +3036,9 @@ public class I2PSnarkServlet extends BasicServlet {
             buf.append("<a href=\"").append(base)
                .append(getQueryString(sort)).append("\">");
         }
-        tx = _("Size");
+        tx = _t("Size");
         toThemeImg(buf, "size", tx,
-                   showSort ? _("Sort by {0}", tx) : tx);
+                   showSort ? _t("Sort by {0}", tx) : tx);
         if (showSort)
             buf.append("</a>");
         buf.append("</th>\n<th class=\"headerstatus\">");
@@ -3048,9 +3048,9 @@ public class I2PSnarkServlet extends BasicServlet {
             buf.append("<a href=\"").append(base)
                .append(getQueryString(sort)).append("\">");
         }
-        tx = _("Status");
+        tx = _t("Status");
         toThemeImg(buf, "status", tx,
-                   showRemainingSort ? _("Sort by {0}", _("Remaining")) : tx);
+                   showRemainingSort ? _t("Sort by {0}", _t("Remaining")) : tx);
         if (showRemainingSort)
             buf.append("</a>");
         if (showPriority) {
@@ -3060,9 +3060,9 @@ public class I2PSnarkServlet extends BasicServlet {
                 buf.append("<a href=\"").append(base)
                    .append(getQueryString(sort)).append("\">");
             }
-            tx = _("Priority");
+            tx = _t("Priority");
             toThemeImg(buf, "priority", tx,
-                       showSort ? _("Sort by {0}", tx) : tx);
+                       showSort ? _t("Sort by {0}", tx) : tx);
             if (showSort)
                 buf.append("</a>");
         }
@@ -3072,7 +3072,7 @@ public class I2PSnarkServlet extends BasicServlet {
         buf.append("\">");
         toThemeImg(buf, "up");
         buf.append(' ')
-           .append(_("Up to higher level directory"))
+           .append(_t("Up to higher level directory"))
            .append("</A></td></tr>\n");
 
 
@@ -3101,21 +3101,21 @@ public class I2PSnarkServlet extends BasicServlet {
             int priority = 0;
             if (fai.isDirectory) {
                 complete = true;
-                //status = toImg("tick") + ' ' + _("Directory");
+                //status = toImg("tick") + ' ' + _t("Directory");
             } else {
                 if (snark == null || snark.getStorage() == null) {
                     // Assume complete, perhaps he removed a completed torrent but kept a bookmark
                     complete = true;
-                    status = toImg("cancel") + ' ' + _("Torrent not found?");
+                    status = toImg("cancel") + ' ' + _t("Torrent not found?");
                 } else {
 
                             long remaining = fai.remaining;
                             if (remaining < 0) {
                                 complete = true;
-                                status = toImg("cancel") + ' ' + _("File not found in torrent?");
+                                status = toImg("cancel") + ' ' + _t("File not found in torrent?");
                             } else if (remaining == 0 || length <= 0) {
                                 complete = true;
-                                status = toImg("tick") + ' ' + _("Complete");
+                                status = toImg("tick") + ' ' + _t("Complete");
                             } else {
                                 priority = fai.priority;
                                 if (priority < 0)
@@ -3125,8 +3125,8 @@ public class I2PSnarkServlet extends BasicServlet {
                                 else
                                     status = toImg("clock_red");
                                 status += " " +
-                                         (100 * (length - remaining) / length) + "% " + _("complete") +
-                                         " (" + DataHelper.formatSize2(remaining) + "B " + _("remaining") + ")";
+                                         (100 * (length - remaining) / length) + "% " + _t("complete") +
+                                         " (" + DataHelper.formatSize2(remaining) + "B " + _t("remaining") + ")";
                             }
 
                 }
@@ -3148,7 +3148,7 @@ public class I2PSnarkServlet extends BasicServlet {
                     buf.append("<img alt=\"\" border=\"0\" class=\"thumb\" src=\"")
                        .append(path).append("\"></a>");
                 } else {
-                    buf.append(toImg(icon, _("Open"))).append("</a>");
+                    buf.append(toImg(icon, _t("Open"))).append("</a>");
                 }
             } else {
                 buf.append(toImg(icon));
@@ -3172,17 +3172,17 @@ public class I2PSnarkServlet extends BasicServlet {
                     buf.append("\n<input type=\"radio\" onclick=\"priorityclicked();\" class=\"prihigh\" value=\"5\" name=\"pri.").append(fileIndex).append("\" ");
                     if (priority > 0)
                         buf.append("checked=\"checked\"");
-                    buf.append('>').append(_("High"));
+                    buf.append('>').append(_t("High"));
 
                     buf.append("\n<input type=\"radio\" onclick=\"priorityclicked();\" class=\"prinorm\" value=\"0\" name=\"pri.").append(fileIndex).append("\" ");
                     if (priority == 0)
                         buf.append("checked=\"checked\"");
-                    buf.append('>').append(_("Normal"));
+                    buf.append('>').append(_t("Normal"));
 
                     buf.append("\n<input type=\"radio\" onclick=\"priorityclicked();\" class=\"priskip\" value=\"-9\" name=\"pri.").append(fileIndex).append("\" ");
                     if (priority < 0)
                         buf.append("checked=\"checked\"");
-                    buf.append('>').append(_("Skip"));
+                    buf.append('>').append(_t("Skip"));
                     showSaveButton = true;
                 }
                 buf.append("</td>");
@@ -3192,12 +3192,12 @@ public class I2PSnarkServlet extends BasicServlet {
         if (showSaveButton) {
             buf.append("<thead><tr><th colspan=\"4\">&nbsp;</th><th class=\"headerpriority\">" +
                        "<a class=\"control\" id=\"setallhigh\" href=\"javascript:void(null);\" onclick=\"setallhigh();\">")
-               .append(toImg("clock_red")).append(_("Set all high")).append("</a>\n" +
+               .append(toImg("clock_red")).append(_t("Set all high")).append("</a>\n" +
                        "<a class=\"control\" id=\"setallnorm\" href=\"javascript:void(null);\" onclick=\"setallnorm();\">")
-               .append(toImg("clock")).append(_("Set all normal")).append("</a>\n" +
+               .append(toImg("clock")).append(_t("Set all normal")).append("</a>\n" +
                        "<a class=\"control\" id=\"setallskip\" href=\"javascript:void(null);\" onclick=\"setallskip();\">")
-               .append(toImg("cancel")).append(_("Skip all")).append("</a>\n" +
-                       "<br><br><input type=\"submit\" class=\"accept\" value=\"").append(_("Save priorities"))
+               .append(toImg("cancel")).append(_t("Skip all")).append("</a>\n" +
+                       "<br><br><input type=\"submit\" class=\"accept\" value=\"").append(_t("Save priorities"))
                .append("\" name=\"savepri\" >\n" +
                        "</th></tr></thead>\n");
         }
diff --git a/apps/i2psnark/locale/messages_ar.po b/apps/i2psnark/locale/messages_ar.po
index 5410a2daa5..502c69b90f 100644
--- a/apps/i2psnark/locale/messages_ar.po
+++ b/apps/i2psnark/locale/messages_ar.po
@@ -826,7 +826,7 @@ msgid "Enter valid tracker name and URLs"
 msgstr ""
 
 #. "<input type=\"reset\" class=\"cancel\"
-#. value=\"").append(_("Cancel")).append("\">\n" +
+#. value=\"").append(_t("Cancel")).append("\">\n" +
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1361
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2410
 msgid "Restore defaults"
diff --git a/apps/i2psnark/locale/messages_cs.po b/apps/i2psnark/locale/messages_cs.po
index b107d9e86c..c2690f07f9 100644
--- a/apps/i2psnark/locale/messages_cs.po
+++ b/apps/i2psnark/locale/messages_cs.po
@@ -817,7 +817,7 @@ msgid "Enter valid tracker name and URLs"
 msgstr ""
 
 #. "<input type=\"reset\" class=\"cancel\"
-#. value=\"").append(_("Cancel")).append("\">\n" +
+#. value=\"").append(_t("Cancel")).append("\">\n" +
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1361
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2410
 msgid "Restore defaults"
diff --git a/apps/i2psnark/locale/messages_de.po b/apps/i2psnark/locale/messages_de.po
index 927df100d5..dcdd0cb115 100644
--- a/apps/i2psnark/locale/messages_de.po
+++ b/apps/i2psnark/locale/messages_de.po
@@ -826,7 +826,7 @@ msgid "Enter valid tracker name and URLs"
 msgstr "Geben Sie einen gültigen Tracker-Namen und die URLs ein"
 
 #. "<input type=\"reset\" class=\"cancel\"
-#. value=\"").append(_("Cancel")).append("\">\n" +
+#. value=\"").append(_t("Cancel")).append("\">\n" +
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1361
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2410
 msgid "Restore defaults"
diff --git a/apps/i2psnark/locale/messages_en.po b/apps/i2psnark/locale/messages_en.po
index d29a692a65..e34056fede 100644
--- a/apps/i2psnark/locale/messages_en.po
+++ b/apps/i2psnark/locale/messages_en.po
@@ -808,7 +808,7 @@ msgstr ""
 msgid "Enter valid tracker name and URLs"
 msgstr ""
 
-#. "<input type=\"reset\" class=\"cancel\" value=\"").append(_("Cancel")).append("\">\n" +
+#. "<input type=\"reset\" class=\"cancel\" value=\"").append(_t("Cancel")).append("\">\n" +
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1361
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2410
 msgid "Restore defaults"
diff --git a/apps/i2psnark/locale/messages_es.po b/apps/i2psnark/locale/messages_es.po
index b173cff249..c7a293fd04 100644
--- a/apps/i2psnark/locale/messages_es.po
+++ b/apps/i2psnark/locale/messages_es.po
@@ -824,7 +824,7 @@ msgid "Enter valid tracker name and URLs"
 msgstr "Introduzca nombre y URLs de tracker (rastreador) válidos"
 
 #. "<input type=\"reset\" class=\"cancel\"
-#. value=\"").append(_("Cancel")).append("\">\n" +
+#. value=\"").append(_t("Cancel")).append("\">\n" +
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1361
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2410
 msgid "Restore defaults"
diff --git a/apps/i2psnark/locale/messages_fr.po b/apps/i2psnark/locale/messages_fr.po
index 9aa06fb15f..c8987da9ad 100644
--- a/apps/i2psnark/locale/messages_fr.po
+++ b/apps/i2psnark/locale/messages_fr.po
@@ -821,7 +821,7 @@ msgid "Enter valid tracker name and URLs"
 msgstr "Entrez nom de tracker valide et URLs"
 
 #. "<input type=\"reset\" class=\"cancel\"
-#. value=\"").append(_("Cancel")).append("\">\n" +
+#. value=\"").append(_t("Cancel")).append("\">\n" +
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1361
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2410
 msgid "Restore defaults"
diff --git a/apps/i2psnark/locale/messages_hu.po b/apps/i2psnark/locale/messages_hu.po
index 1029742838..6710e744ee 100644
--- a/apps/i2psnark/locale/messages_hu.po
+++ b/apps/i2psnark/locale/messages_hu.po
@@ -814,7 +814,7 @@ msgid "Enter valid tracker name and URLs"
 msgstr "Adj meg érvényes követő (tracker) nevet és URL címeket"
 
 #. "<input type=\"reset\" class=\"cancel\"
-#. value=\"").append(_("Cancel")).append("\">\n" +
+#. value=\"").append(_t("Cancel")).append("\">\n" +
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1361
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2410
 msgid "Restore defaults"
diff --git a/apps/i2psnark/locale/messages_it.po b/apps/i2psnark/locale/messages_it.po
index 5ad5f6edc6..e0315ca194 100644
--- a/apps/i2psnark/locale/messages_it.po
+++ b/apps/i2psnark/locale/messages_it.po
@@ -818,7 +818,7 @@ msgid "Enter valid tracker name and URLs"
 msgstr "Inserisci nome e URL validi per il tracker"
 
 #. "<input type=\"reset\" class=\"cancel\"
-#. value=\"").append(_("Cancel")).append("\">\n" +
+#. value=\"").append(_t("Cancel")).append("\">\n" +
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1361
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2410
 msgid "Restore defaults"
diff --git a/apps/i2psnark/locale/messages_nb.po b/apps/i2psnark/locale/messages_nb.po
index dc7cde85ea..43d9111cc2 100644
--- a/apps/i2psnark/locale/messages_nb.po
+++ b/apps/i2psnark/locale/messages_nb.po
@@ -813,7 +813,7 @@ msgid "Enter valid tracker name and URLs"
 msgstr "Skriv inn valid tracker navn og URLer"
 
 #. "<input type=\"reset\" class=\"cancel\"
-#. value=\"").append(_("Cancel")).append("\">\n" +
+#. value=\"").append(_t("Cancel")).append("\">\n" +
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1361
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2410
 msgid "Restore defaults"
diff --git a/apps/i2psnark/locale/messages_nl.po b/apps/i2psnark/locale/messages_nl.po
index 84b8674119..20ff930448 100644
--- a/apps/i2psnark/locale/messages_nl.po
+++ b/apps/i2psnark/locale/messages_nl.po
@@ -816,7 +816,7 @@ msgid "Enter valid tracker name and URLs"
 msgstr "Geef een geldige trackernaam en URLs in"
 
 #. "<input type=\"reset\" class=\"cancel\"
-#. value=\"").append(_("Cancel")).append("\">\n" +
+#. value=\"").append(_t("Cancel")).append("\">\n" +
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1361
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2410
 msgid "Restore defaults"
diff --git a/apps/i2psnark/locale/messages_pl.po b/apps/i2psnark/locale/messages_pl.po
index 854c906729..3a67840540 100644
--- a/apps/i2psnark/locale/messages_pl.po
+++ b/apps/i2psnark/locale/messages_pl.po
@@ -823,7 +823,7 @@ msgid "Enter valid tracker name and URLs"
 msgstr "Podaj prawidłową nazwę trackera i URL"
 
 #. "<input type=\"reset\" class=\"cancel\"
-#. value=\"").append(_("Cancel")).append("\">\n" +
+#. value=\"").append(_t("Cancel")).append("\">\n" +
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1361
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2410
 msgid "Restore defaults"
diff --git a/apps/i2psnark/locale/messages_pt.po b/apps/i2psnark/locale/messages_pt.po
index 8d356e6272..5cd2d6c44f 100644
--- a/apps/i2psnark/locale/messages_pt.po
+++ b/apps/i2psnark/locale/messages_pt.po
@@ -822,7 +822,7 @@ msgid "Enter valid tracker name and URLs"
 msgstr "Insira um nome válido para o tracker e URLs"
 
 #. "<input type=\"reset\" class=\"cancel\"
-#. value=\"").append(_("Cancel")).append("\">\n" +
+#. value=\"").append(_t("Cancel")).append("\">\n" +
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1361
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2410
 msgid "Restore defaults"
diff --git a/apps/i2psnark/locale/messages_pt_bR.po b/apps/i2psnark/locale/messages_pt_bR.po
index 4b20ea31fe..251188047e 100644
--- a/apps/i2psnark/locale/messages_pt_bR.po
+++ b/apps/i2psnark/locale/messages_pt_bR.po
@@ -814,7 +814,7 @@ msgid "Enter valid tracker name and URLs"
 msgstr ""
 
 #. "<input type=\"reset\" class=\"cancel\"
-#. value=\"").append(_("Cancel")).append("\">\n" +
+#. value=\"").append(_t("Cancel")).append("\">\n" +
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1361
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2410
 msgid "Restore defaults"
diff --git a/apps/i2psnark/locale/messages_ro.po b/apps/i2psnark/locale/messages_ro.po
index 98d4bb92c8..d0575dd0ff 100644
--- a/apps/i2psnark/locale/messages_ro.po
+++ b/apps/i2psnark/locale/messages_ro.po
@@ -817,7 +817,7 @@ msgid "Enter valid tracker name and URLs"
 msgstr "Introduceți numele tracker valid și URL-uri"
 
 #. "<input type=\"reset\" class=\"cancel\"
-#. value=\"").append(_("Cancel")).append("\">\n" +
+#. value=\"").append(_t("Cancel")).append("\">\n" +
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1361
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2410
 msgid "Restore defaults"
diff --git a/apps/i2psnark/locale/messages_ru.po b/apps/i2psnark/locale/messages_ru.po
index 19652c1050..92a8316792 100644
--- a/apps/i2psnark/locale/messages_ru.po
+++ b/apps/i2psnark/locale/messages_ru.po
@@ -829,7 +829,7 @@ msgid "Enter valid tracker name and URLs"
 msgstr "Введите действительное название и URL трекера"
 
 #. "<input type=\"reset\" class=\"cancel\"
-#. value=\"").append(_("Cancel")).append("\">\n" +
+#. value=\"").append(_t("Cancel")).append("\">\n" +
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1361
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2410
 msgid "Restore defaults"
diff --git a/apps/i2psnark/locale/messages_sk.po b/apps/i2psnark/locale/messages_sk.po
index c4780b7252..339f354268 100644
--- a/apps/i2psnark/locale/messages_sk.po
+++ b/apps/i2psnark/locale/messages_sk.po
@@ -816,7 +816,7 @@ msgid "Enter valid tracker name and URLs"
 msgstr "Zadajte platný názov a URL stopovača"
 
 #. "<input type=\"reset\" class=\"cancel\"
-#. value=\"").append(_("Cancel")).append("\">\n" +
+#. value=\"").append(_t("Cancel")).append("\">\n" +
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1361
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2410
 msgid "Restore defaults"
diff --git a/apps/i2psnark/locale/messages_sv.po b/apps/i2psnark/locale/messages_sv.po
index 7f653edeaf..ec566c4eb5 100644
--- a/apps/i2psnark/locale/messages_sv.po
+++ b/apps/i2psnark/locale/messages_sv.po
@@ -822,7 +822,7 @@ msgid "Enter valid tracker name and URLs"
 msgstr "Ange giltigt namn och adresser för trackern "
 
 #. "<input type=\"reset\" class=\"cancel\"
-#. value=\"").append(_("Cancel")).append("\">\n" +
+#. value=\"").append(_t("Cancel")).append("\">\n" +
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1361
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2410
 msgid "Restore defaults"
diff --git a/apps/i2psnark/locale/messages_vi.po b/apps/i2psnark/locale/messages_vi.po
index cad895268a..d7d0e8067c 100644
--- a/apps/i2psnark/locale/messages_vi.po
+++ b/apps/i2psnark/locale/messages_vi.po
@@ -810,7 +810,7 @@ msgid "Enter valid tracker name and URLs"
 msgstr ""
 
 #. "<input type=\"reset\" class=\"cancel\"
-#. value=\"").append(_("Cancel")).append("\">\n" +
+#. value=\"").append(_t("Cancel")).append("\">\n" +
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1361
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2410
 msgid "Restore defaults"
diff --git a/apps/i2psnark/locale/messages_zh.po b/apps/i2psnark/locale/messages_zh.po
index 5017281a9f..cb4216a405 100644
--- a/apps/i2psnark/locale/messages_zh.po
+++ b/apps/i2psnark/locale/messages_zh.po
@@ -814,7 +814,7 @@ msgid "Enter valid tracker name and URLs"
 msgstr "请输入有效的 Tracker 名称与链接"
 
 #. "<input type=\"reset\" class=\"cancel\"
-#. value=\"").append(_("Cancel")).append("\">\n" +
+#. value=\"").append(_t("Cancel")).append("\">\n" +
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1361
 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2410
 msgid "Restore defaults"
diff --git a/apps/i2ptunnel/java/bundle-messages-proxy.sh b/apps/i2ptunnel/java/bundle-messages-proxy.sh
index 8ffdc5a9eb..147e32952f 100755
--- a/apps/i2ptunnel/java/bundle-messages-proxy.sh
+++ b/apps/i2ptunnel/java/bundle-messages-proxy.sh
@@ -62,16 +62,16 @@ do
 	 	echo "Updating the $i file from the tags..."
 		# extract strings from java and jsp files, and update messages.po files
 		# translate calls must be one of the forms:
-		# _("foo")
+		# _t("foo")
 		# _x("foo")
-		# intl._("foo")
+		# intl._t("foo")
 		# intl.title("foo")
 		# In a jsp, you must use a helper or handler that has the context set.
 		# To start a new translation, copy the header from an old translation to the new .po file,
 		# then ant distclean updater.
 		find $JPATHS -name *.java > $TMPFILE
 		xgettext -f $TMPFILE -F -L java --from-code=UTF-8 --add-comments\
-	                 --keyword=_ \
+	                 --keyword=_t \
 		         -o ${i}t
 		if [ $? -ne 0 ]
 		then
diff --git a/apps/i2ptunnel/java/bundle-messages.sh b/apps/i2ptunnel/java/bundle-messages.sh
index a8769f0dcc..29a0bec93b 100755
--- a/apps/i2ptunnel/java/bundle-messages.sh
+++ b/apps/i2ptunnel/java/bundle-messages.sh
@@ -61,16 +61,16 @@ do
 	 	echo "Updating the $i file from the tags..."
 		# extract strings from java and jsp files, and update messages.po files
 		# translate calls must be one of the forms:
-		# _("foo")
+		# _t("foo")
 		# _x("foo")
-		# intl._("foo")
+		# intl._t("foo")
 		# intl.title("foo")
 		# In a jsp, you must use a helper or handler that has the context set.
 		# To start a new translation, copy the header from an old translation to the new .po file,
 		# then ant distclean updater.
 		find $JPATHS -name *.java > $TMPFILE
 		xgettext -f $TMPFILE -F -L java --from-code=UTF-8 --add-comments\
-	                 --keyword=_ --keyword=_x --keyword=intl._ --keyword=intl.title \
+	                 --keyword=_t --keyword=_x --keyword=intl._ --keyword=intl.title \
 		         -o ${i}t
 		if [ $? -ne 0 ]
 		then
diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java
index 8645b686f4..4183ce3991 100644
--- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java
+++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java
@@ -631,8 +631,8 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
                                             String header = getErrorPage("ahelper-notfound", ERR_AHELPER_NOTFOUND);
                                             try {
                                                 out.write(header.getBytes("UTF-8"));
-                                                out.write(("<p>" + _("This seems to be a bad destination:") + " " + ahelperKey + " " +
-                                                           _("i2paddresshelper cannot help you with a destination like that!") +
+                                                out.write(("<p>" + _t("This seems to be a bad destination:") + " " + ahelperKey + " " +
+                                                           _t("i2paddresshelper cannot help you with a destination like that!") +
                                                            "</p>").getBytes("UTF-8"));
                                                 writeFooter(out);
                                                 reader.drain();
@@ -706,7 +706,7 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
                                         String conflictURL = conflictURI.toASCIIString();
                                         String header = getErrorPage("ahelper-conflict", ERR_AHELPER_CONFLICT);
                                         out.write(header.getBytes("UTF-8"));
-                                        out.write(_("To visit the destination in your host database, click <a href=\"{0}\">here</a>. To visit the conflicting addresshelper destination, click <a href=\"{1}\">here</a>.",
+                                        out.write(_t("To visit the destination in your host database, click <a href=\"{0}\">here</a>. To visit the conflicting addresshelper destination, click <a href=\"{1}\">here</a>.",
                                                     trustedURL, conflictURL).getBytes("UTF-8"));
                                         out.write("</p></div>".getBytes("UTF-8"));
                                         writeFooter(out);
@@ -1118,7 +1118,7 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
                     header = getErrorPage("dnfb", ERR_DESTINATION_UNKNOWN);
                 } else if(destination.length() == 60 && destination.toLowerCase(Locale.US).endsWith(".b32.i2p")) {
                     header = getErrorPage("nols", ERR_DESTINATION_UNKNOWN);
-                    extraMessage = _("Destination lease set not found");
+                    extraMessage = _t("Destination lease set not found");
                 } else {
                     header = getErrorPage("dnfh", ERR_DESTINATION_UNKNOWN);
                     jumpServers = getTunnel().getClientOptions().getProperty(PROP_JUMP_SERVERS);
@@ -1270,31 +1270,31 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
         Writer out = new BufferedWriter(new OutputStreamWriter(outs, "UTF-8"));
         String header = getErrorPage("ahelper-new", ERR_AHELPER_NEW);
         out.write(header);
-        out.write("<table><tr><td class=\"mediumtags\" align=\"right\">" + _("Host") +
+        out.write("<table><tr><td class=\"mediumtags\" align=\"right\">" + _t("Host") +
                 "</td><td class=\"mediumtags\">" + destination + "</td></tr>\n");
         try {
             String b32 = Base32.encode(SHA256Generator.getInstance().calculateHash(Base64.decode(ahelperKey)).getData());
-            out.write("<tr><td class=\"mediumtags\" align=\"right\">" + _("Base 32") + "</td>" +
+            out.write("<tr><td class=\"mediumtags\" align=\"right\">" + _t("Base 32") + "</td>" +
                     "<td><a href=\"http://" + b32 + ".b32.i2p/\">" + b32 + ".b32.i2p</a></td></tr>");
         } catch(Exception e) {
         }
-        out.write("<tr><td class=\"mediumtags\" align=\"right\">" + _("Destination") + "</td><td>" +
+        out.write("<tr><td class=\"mediumtags\" align=\"right\">" + _t("Destination") + "</td><td>" +
                 "<textarea rows=\"1\" style=\"height: 4em; min-width: 0; min-height: 0;\" cols=\"70\" wrap=\"off\" readonly=\"readonly\" >" +
                 ahelperKey + "</textarea></td></tr></table>\n" +
                 "<hr><div class=\"formaction\">" +
                 // FIXME if there is a query remaining it is lost
                 "<form method=\"GET\" action=\"" + targetRequest + "\">" +
-                "<button type=\"submit\" class=\"go\">" + _("Continue to {0} without saving", destination) + "</button>" +
+                "<button type=\"submit\" class=\"go\">" + _t("Continue to {0} without saving", destination) + "</button>" +
                 "</form>\n<form method=\"GET\" action=\"http://" + LOCAL_SERVER + "/add\">" +
                 "<input type=\"hidden\" name=\"host\" value=\"" + destination + "\">\n" +
                 "<input type=\"hidden\" name=\"dest\" value=\"" + ahelperKey + "\">\n" +
                 "<input type=\"hidden\" name=\"nonce\" value=\"" + _proxyNonce + "\">\n" +
                 "<button type=\"submit\" class=\"accept\" name=\"router\" value=\"router\">" +
-                _("Save {0} to router address book and continue to website", destination) + "</button><br>\n");
+                _t("Save {0} to router address book and continue to website", destination) + "</button><br>\n");
         if(_context.namingService().getName().equals("BlockfileNamingService")) {
             // only blockfile supports multiple books
-            out.write("<br><button type=\"submit\" name=\"master\" value=\"master\">" + _("Save {0} to master address book and continue to website", destination) + "</button><br>\n");
-            out.write("<button type=\"submit\" name=\"private\" value=\"private\">" + _("Save {0} to private address book and continue to website", destination) + "</button>\n");
+            out.write("<br><button type=\"submit\" name=\"master\" value=\"master\">" + _t("Save {0} to master address book and continue to website", destination) + "</button><br>\n");
+            out.write("<button type=\"submit\" name=\"private\" value=\"private\">" + _t("Save {0} to private address book and continue to website", destination) + "</button>\n");
         }
         // Firefox (and others?) don't send referer to meta refresh target, which is
         // what the jump servers use, so this isn't that useful.
diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClientBase.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClientBase.java
index 5824f1fc36..5e39cf3b83 100644
--- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClientBase.java
+++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClientBase.java
@@ -684,7 +684,7 @@ public abstract class I2PTunnelHTTPClientBase extends I2PTunnelClientBase implem
             out.write("</a>");
             if (usingWWWProxy) {
                 out.write("<br><br><b>");
-                out.write(_("HTTP Outproxy"));
+                out.write(_t("HTTP Outproxy"));
                 out.write(":</b> " + wwwProxy);
             }
             if (extraMessage != null) {
@@ -723,7 +723,7 @@ public abstract class I2PTunnelHTTPClientBase extends I2PTunnelClientBase implem
                     if (first) {
                         first = false;
                         out.write("<br><br><h3>");
-                        out.write(_("Click a link below for an address helper from a jump service"));
+                        out.write(_t("Click a link below for an address helper from a jump service"));
                         out.write("</h3>\n");
                     } else {
                         out.write("<br>");
@@ -733,7 +733,7 @@ public abstract class I2PTunnelHTTPClientBase extends I2PTunnelClientBase implem
                     out.write(uri);
                     out.write("\">");
                     // Translators: parameter is a host name
-                    out.write(_("{0} jump service", jumphost));
+                    out.write(_t("{0} jump service", jumphost));
                     out.write("</a>\n");
                 }
             }
@@ -778,7 +778,7 @@ public abstract class I2PTunnelHTTPClientBase extends I2PTunnelClientBase implem
      *  Translate
      *  @since 0.9.14 moved from I2PTunnelHTTPClient
      */
-    protected String _(String key) {
+    protected String _t(String key) {
         return Translate.getString(key, _context, BUNDLE_NAME);
     }
 
@@ -787,7 +787,7 @@ public abstract class I2PTunnelHTTPClientBase extends I2PTunnelClientBase implem
      *  {0}
      *  @since 0.9.14 moved from I2PTunnelHTTPClient
      */
-    protected String _(String key, Object o) {
+    protected String _t(String key, Object o) {
         return Translate.getString(key, o, _context, BUNDLE_NAME);
     }
 
@@ -796,7 +796,7 @@ public abstract class I2PTunnelHTTPClientBase extends I2PTunnelClientBase implem
      *  {0} and {1}
      *  @since 0.9.14 moved from I2PTunnelHTTPClient
      */
-    protected String _(String key, Object o, Object o2) {
+    protected String _t(String key, Object o, Object o2) {
         return Translate.getString(key, o, o2, _context, BUNDLE_NAME);
     }
 }
diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/localServer/LocalHTTPServer.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/localServer/LocalHTTPServer.java
index 2d70caed03..15e67de745 100644
--- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/localServer/LocalHTTPServer.java
+++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/localServer/LocalHTTPServer.java
@@ -166,9 +166,9 @@ public abstract class LocalHTTPServer {
                 nsOptions.setProperty("list", book);
                 if (referer != null && referer.startsWith("http")) {
                     String from = "<a href=\"" + referer + "\">" + referer + "</a>";
-                    nsOptions.setProperty("s", _("Added via address helper from {0}", from));
+                    nsOptions.setProperty("s", _t("Added via address helper from {0}", from));
                 } else {
-                    nsOptions.setProperty("s", _("Added via address helper"));
+                    nsOptions.setProperty("s", _t("Added via address helper"));
                 }
                 boolean success = ns.put(host, dest, nsOptions);
                 writeRedirectPage(out, success, host, book, url);
@@ -185,11 +185,11 @@ public abstract class LocalHTTPServer {
     private static void writeRedirectPage(OutputStream out, boolean success, String host, String book, String url) throws IOException {
         String tbook;
         if ("hosts.txt".equals(book))
-            tbook = _("router");
+            tbook = _t("router");
         else if ("userhosts.txt".equals(book))
-            tbook = _("master");
+            tbook = _t("master");
         else if ("privatehosts.txt".equals(book))
-            tbook = _("private");
+            tbook = _t("private");
         else
             tbook = book;
         out.write(("HTTP/1.1 200 OK\r\n"+
@@ -198,22 +198,22 @@ public abstract class LocalHTTPServer {
                   "Proxy-Connection: close\r\n"+
                   "\r\n"+
                   "<html><head>"+
-                  "<title>" + _("Redirecting to {0}", host) + "</title>\n" +
+                  "<title>" + _t("Redirecting to {0}", host) + "</title>\n" +
                   "<link rel=\"shortcut icon\" href=\"http://proxy.i2p/themes/console/images/favicon.ico\" >\n" +
                   "<link href=\"http://proxy.i2p/themes/console/default/console.css\" rel=\"stylesheet\" type=\"text/css\" >\n" +
                   "<meta http-equiv=\"Refresh\" content=\"1; url=" + url + "\">\n" +
                   "</head><body>\n" +
                   "<div class=logo>\n" +
-                  "<a href=\"http://127.0.0.1:7657/\" title=\"" + _("Router Console") + "\"><img src=\"http://proxy.i2p/themes/console/images/i2plogo.png\" alt=\"I2P Router Console\" border=\"0\"></a><hr>\n" +
-                  "<a href=\"http://127.0.0.1:7657/config\">" + _("Configuration") + "</a> <a href=\"http://127.0.0.1:7657/help.jsp\">" + _("Help") + "</a> <a href=\"http://127.0.0.1:7657/susidns/index\">" + _("Addressbook") + "</a>\n" +
+                  "<a href=\"http://127.0.0.1:7657/\" title=\"" + _t("Router Console") + "\"><img src=\"http://proxy.i2p/themes/console/images/i2plogo.png\" alt=\"I2P Router Console\" border=\"0\"></a><hr>\n" +
+                  "<a href=\"http://127.0.0.1:7657/config\">" + _t("Configuration") + "</a> <a href=\"http://127.0.0.1:7657/help.jsp\">" + _t("Help") + "</a> <a href=\"http://127.0.0.1:7657/susidns/index\">" + _t("Addressbook") + "</a>\n" +
                   "</div>" +
                   "<div class=warning id=warning>\n" +
                   "<h3>" +
                   (success ?
-                           _("Saved {0} to the {1} addressbook, redirecting now.", host, tbook) :
-                           _("Failed to save {0} to the {1} addressbook, redirecting now.", host, tbook)) +
+                           _t("Saved {0} to the {1} addressbook, redirecting now.", host, tbook) :
+                           _t("Failed to save {0} to the {1} addressbook, redirecting now.", host, tbook)) +
                   "</h3>\n<p><a href=\"" + url + "\">" +
-                  _("Click here if you are not redirected automatically.") +
+                  _t("Click here if you are not redirected automatically.") +
                   "</a></p></div>").getBytes("UTF-8"));
         I2PTunnelHTTPClient.writeFooter(out);
         out.flush();
@@ -248,17 +248,17 @@ public abstract class LocalHTTPServer {
     private static final String BUNDLE_NAME = "net.i2p.i2ptunnel.proxy.messages";
 
     /** lang in routerconsole.lang property, else current locale */
-    protected static String _(String key) {
+    protected static String _t(String key) {
         return Translate.getString(key, I2PAppContext.getGlobalContext(), BUNDLE_NAME);
     }
 
     /** {0} */
-    protected static String _(String key, Object o) {
+    protected static String _t(String key, Object o) {
         return Translate.getString(key, o, I2PAppContext.getGlobalContext(), BUNDLE_NAME);
     }
 
     /** {0} and {1} */
-    protected static String _(String key, Object o, Object o2) {
+    protected static String _t(String key, Object o, Object o2) {
         return Translate.getString(key, o, o2, I2PAppContext.getGlobalContext(), BUNDLE_NAME);
     }
 
diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/ui/GeneralHelper.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/ui/GeneralHelper.java
index 0cc4e52788..b2b38398eb 100644
--- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/ui/GeneralHelper.java
+++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/ui/GeneralHelper.java
@@ -146,11 +146,11 @@ public class GeneralHelper {
         List<String> rv = tcg.clearAllMessages();
         try {
             tcg.saveConfig();
-            rv.add(0, _("Configuration changes saved", context));
+            rv.add(0, _t("Configuration changes saved", context));
         } catch (IOException ioe) {
             Log log = context.logManager().getLog(GeneralHelper.class);
             log.error("Failed to save config file", ioe);
-            rv.add(0, _("Failed to save configuration", context) + ": " + ioe.toString());
+            rv.add(0, _t("Failed to save configuration", context) + ": " + ioe.toString());
         }
         return rv;
     }
@@ -714,7 +714,7 @@ public class GeneralHelper {
         return def;
     }
 
-    protected static String _(String key, I2PAppContext context) {
-        return Messages._(key, context);
+    protected static String _t(String key, I2PAppContext context) {
+        return Messages._t(key, context);
     }
 }
diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/EditBean.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/EditBean.java
index ebc4950981..fb9b137b22 100644
--- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/EditBean.java
+++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/EditBean.java
@@ -358,7 +358,7 @@ public class EditBean extends IndexBean {
 
     public String getI2CPHost(int tunnel) {
         if (_context.isRouterContext())
-            return _("internal");
+            return _t("internal");
         TunnelController tun = getController(tunnel);
         if (tun != null)
             return tun.getI2CPHost();
@@ -368,7 +368,7 @@ public class EditBean extends IndexBean {
     
     public String getI2CPPort(int tunnel) {
         if (_context.isRouterContext())
-            return _("internal");
+            return _t("internal");
         TunnelController tun = getController(tunnel);
         if (tun != null)
             return tun.getI2CPPort();
@@ -406,11 +406,11 @@ public class EditBean extends IndexBean {
              if (i <= 3) {
                  buf.append(" (");
                  if (i == 1)
-                     buf.append(_("lower bandwidth and reliability"));
+                     buf.append(_t("lower bandwidth and reliability"));
                  else if (i == 2)
-                     buf.append(_("standard bandwidth and reliability"));
+                     buf.append(_t("standard bandwidth and reliability"));
                  else if (i == 3)
-                     buf.append(_("higher bandwidth and reliability"));
+                     buf.append(_t("higher bandwidth and reliability"));
                  buf.append(')');
              }
              buf.append("</option>\n");
diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/IndexBean.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/IndexBean.java
index ccb30ca992..15eb3f29ee 100644
--- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/IndexBean.java
+++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/IndexBean.java
@@ -84,7 +84,7 @@ public class IndexBean {
         String error;
         try {
             tcg = TunnelControllerGroup.getInstance();
-            error = tcg == null ? _("Tunnels are not initialized yet, please reload in two minutes.")
+            error = tcg == null ? _t("Tunnels are not initialized yet, please reload in two minutes.")
                                 : null;
         } catch (IllegalArgumentException iae) {
             tcg = null;
@@ -157,9 +157,9 @@ public class IndexBean {
         // If passwords are turned on, all is assumed good
         if (!_context.getBooleanProperty(PROP_PW_ENABLE) &&
             !haveNonce(_curNonce))
-            return _("Invalid form submission, probably because you used the 'back' or 'reload' button on your browser. Please resubmit.")
+            return _t("Invalid form submission, probably because you used the 'back' or 'reload' button on your browser. Please resubmit.")
                    + ' ' +
-                   _("If the problem persists, verify that you have cookies enabled in your browser.");
+                   _t("If the problem persists, verify that you have cookies enabled in your browser.");
         if ("Stop all".equals(_action)) 
             return stopAll();
         else if ("Start all".equals(_action))
@@ -205,7 +205,7 @@ public class IndexBean {
 
     private String reloadConfig() {
         _group.reloadControllers();
-        return _("Configuration reloaded for all tunnels");
+        return _t("Configuration reloaded for all tunnels");
     }
 
     private String start() {
@@ -219,7 +219,7 @@ public class IndexBean {
         try { Thread.sleep(1000); } catch (InterruptedException ie) {}
         // and give them something to look at in any case
         // FIXME name will be HTML escaped twice
-        return _("Starting tunnel") + ' ' + getTunnelName(_tunnel) + "...";
+        return _t("Starting tunnel") + ' ' + getTunnelName(_tunnel) + "...";
     }
     
     private String stop() {
@@ -233,7 +233,7 @@ public class IndexBean {
         try { Thread.sleep(1000); } catch (InterruptedException ie) {}
         // and give them something to look at in any case
         // FIXME name will be HTML escaped twice
-        return _("Stopping tunnel") + ' ' + getTunnelName(_tunnel) + "...";
+        return _t("Stopping tunnel") + ' ' + getTunnelName(_tunnel) + "...";
     }
     
     private String saveChanges() {
@@ -322,7 +322,7 @@ public class IndexBean {
         if (name != null)
             return DataHelper.escapeHTML(name);
         else
-            return _("New Tunnel");
+            return _t("New Tunnel");
     }
     
     /**
@@ -342,13 +342,13 @@ public class IndexBean {
         if (tun != null && tun.getListenPort() != null) {
             String port = tun.getListenPort();
             if (port.length() == 0)
-                return "<font color=\"red\">" + _("Port not set") + "</font>";
+                return "<font color=\"red\">" + _t("Port not set") + "</font>";
             int iport = Addresses.getPort(port);
             if (iport == 0)
-                return "<font color=\"red\">" + _("Invalid port") + ' ' + port + "</font>";
+                return "<font color=\"red\">" + _t("Invalid port") + ' ' + port + "</font>";
             if (iport < 1024)
                 return "<font color=\"red\">" +
-                       _("Warning - ports less than 1024 are not recommended") +
+                       _t("Warning - ports less than 1024 are not recommended") +
                        ": " + port + "</font>";
             // dup check, O(n**2)
             List<TunnelController> controllers = _group.getControllers();
@@ -357,12 +357,12 @@ public class IndexBean {
                     continue;
                 if (port.equals(controllers.get(i).getListenPort()))
                     return "<font color=\"red\">" +
-                           _("Warning - duplicate port") +
+                           _t("Warning - duplicate port") +
                            ": " + port + "</font>";
             }
             return port;
         }
-        return "<font color=\"red\">" + _("Port not set") + "</font>";
+        return "<font color=\"red\">" + _t("Port not set") + "</font>";
     }
     
     public String getTunnelType(int tunnel) {
@@ -374,18 +374,18 @@ public class IndexBean {
     }
     
     public String getTypeName(String internalType) {
-        if (TunnelController.TYPE_STD_CLIENT.equals(internalType)) return _("Standard client");
-        else if (TunnelController.TYPE_HTTP_CLIENT.equals(internalType)) return _("HTTP/HTTPS client");
-        else if (TunnelController.TYPE_IRC_CLIENT.equals(internalType)) return _("IRC client");
-        else if (TunnelController.TYPE_STD_SERVER.equals(internalType)) return _("Standard server");
-        else if (TunnelController.TYPE_HTTP_SERVER.equals(internalType)) return _("HTTP server");
-        else if (TunnelController.TYPE_SOCKS.equals(internalType)) return _("SOCKS 4/4a/5 proxy");
-        else if (TunnelController.TYPE_SOCKS_IRC.equals(internalType)) return _("SOCKS IRC proxy");
-        else if (TunnelController.TYPE_CONNECT.equals(internalType)) return _("CONNECT/SSL/HTTPS proxy");
-        else if (TunnelController.TYPE_IRC_SERVER.equals(internalType)) return _("IRC server");
-        else if (TunnelController.TYPE_STREAMR_CLIENT.equals(internalType)) return _("Streamr client");
-        else if (TunnelController.TYPE_STREAMR_SERVER.equals(internalType)) return _("Streamr server");
-        else if (TunnelController.TYPE_HTTP_BIDIR_SERVER.equals(internalType)) return _("HTTP bidir");
+        if (TunnelController.TYPE_STD_CLIENT.equals(internalType)) return _t("Standard client");
+        else if (TunnelController.TYPE_HTTP_CLIENT.equals(internalType)) return _t("HTTP/HTTPS client");
+        else if (TunnelController.TYPE_IRC_CLIENT.equals(internalType)) return _t("IRC client");
+        else if (TunnelController.TYPE_STD_SERVER.equals(internalType)) return _t("Standard server");
+        else if (TunnelController.TYPE_HTTP_SERVER.equals(internalType)) return _t("HTTP server");
+        else if (TunnelController.TYPE_SOCKS.equals(internalType)) return _t("SOCKS 4/4a/5 proxy");
+        else if (TunnelController.TYPE_SOCKS_IRC.equals(internalType)) return _t("SOCKS IRC proxy");
+        else if (TunnelController.TYPE_CONNECT.equals(internalType)) return _t("CONNECT/SSL/HTTPS proxy");
+        else if (TunnelController.TYPE_IRC_SERVER.equals(internalType)) return _t("IRC server");
+        else if (TunnelController.TYPE_STREAMR_CLIENT.equals(internalType)) return _t("Streamr client");
+        else if (TunnelController.TYPE_STREAMR_SERVER.equals(internalType)) return _t("Streamr server");
+        else if (TunnelController.TYPE_HTTP_BIDIR_SERVER.equals(internalType)) return _t("HTTP bidir");
         else return internalType;
     }
     
@@ -442,15 +442,15 @@ public class IndexBean {
                 host = tun.getTargetHost();
             String port = tun.getTargetPort();
             if (host == null || host.length() == 0)
-                host = "<font color=\"red\">" + _("Host not set") + "</font>";
+                host = "<font color=\"red\">" + _t("Host not set") + "</font>";
             else if (Addresses.getIP(host) == null)
-                host = "<font color=\"red\">" + _("Invalid address") + ' ' + host + "</font>";
+                host = "<font color=\"red\">" + _t("Invalid address") + ' ' + host + "</font>";
             else if (host.indexOf(':') >= 0)
                 host = '[' + host + ']';
             if (port == null || port.length() == 0)
-                port = "<font color=\"red\">" + _("Port not set") + "</font>";
+                port = "<font color=\"red\">" + _t("Port not set") + "</font>";
             else if (Addresses.getPort(port) == 0)
-                port = "<font color=\"red\">" + _("Invalid port") + ' ' + port + "</font>";
+                port = "<font color=\"red\">" + _t("Invalid port") + ' ' + port + "</font>";
             return host + ':' + port;
        }  else
             return "";
@@ -1074,8 +1074,8 @@ public class IndexBean {
         }
     }
 
-    protected String _(String key) {
-        return Messages._(key, _context);
+    protected String _t(String key) {
+        return Messages._t(key, _context);
     }
 
     /** translate (ngettext)
diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/Messages.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/Messages.java
index d4a2fb4bdc..89e2bfc431 100644
--- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/Messages.java
+++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/Messages.java
@@ -16,11 +16,11 @@ public class Messages {
     }
 
     /** lang in routerconsole.lang property, else current locale */
-    public String _(String key) {
+    public String _t(String key) {
         return Translate.getString(key, _context, BUNDLE_NAME);
     }
 
-    public static String _(String key, I2PAppContext ctx) {
+    public static String _t(String key, I2PAppContext ctx) {
         return Translate.getString(key, ctx, BUNDLE_NAME);
     }
 
@@ -32,11 +32,11 @@ public class Messages {
      *    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"))
+     *    To tranlslate parameter also, use _t("foo {0} bar", _t("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) {
+    public String _t(String s, Object o) {
         return Translate.getString(s, o, _context, BUNDLE_NAME);
     }
 
diff --git a/apps/i2ptunnel/jsp/editClient.jsp b/apps/i2ptunnel/jsp/editClient.jsp
index c0dd04cf47..5fbc62dd44 100644
--- a/apps/i2ptunnel/jsp/editClient.jsp
+++ b/apps/i2ptunnel/jsp/editClient.jsp
@@ -16,7 +16,7 @@
 %>
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
-    <title><%=intl._("Hidden Services Manager")%> - <%=intl._("Edit Client Tunnel")%></title>
+    <title><%=intl._t("Hidden Services Manager")%> - <%=intl._t("Edit Client Tunnel")%></title>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
     <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
     <link href="/themes/console/images/favicon.ico" type="image/x-icon" rel="shortcut icon" />
@@ -49,11 +49,11 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
                 if (curTunnel >= 0) {
                     tunnelTypeName = editBean.getTunnelType(curTunnel);
                     tunnelType = editBean.getInternalType(curTunnel);
-                  %><h4><%=intl._("Edit proxy settings")%></h4><% 
+                  %><h4><%=intl._t("Edit proxy settings")%></h4><% 
                 } else {
                     tunnelTypeName = editBean.getTypeName(request.getParameter("type"));
                     tunnelType = net.i2p.data.DataHelper.stripHTML(request.getParameter("type"));
-                  %><h4><%=intl._("New proxy settings")%></h4><% 
+                  %><h4><%=intl._t("New proxy settings")%></h4><% 
                 } %>
                 <input type="hidden" name="tunnel" value="<%=curTunnel%>" />
                 <input type="hidden" name="nonce" value="<%=editBean.getNextNonce()%>" />
@@ -87,17 +87,17 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
 
             <div id="nameField" class="rowItem">
                 <label for="name" accesskey="N">
-                    <%=intl._("Name")%>:(<span class="accessKey">N</span>)
+                    <%=intl._t("Name")%>:(<span class="accessKey">N</span>)
                 </label>
                 <input type="text" size="30" maxlength="50" name="name" id="name" title="Tunnel Name" value="<%=editBean.getTunnelName(curTunnel)%>" class="freetext" />               
             </div>
             <div id="typeField" class="rowItem">
-                <label><%=intl._("Type")%>:</label>
+                <label><%=intl._t("Type")%>:</label>
                 <span class="text"><%=tunnelTypeName%></span>
             </div>
             <div id="descriptionField" class="rowItem">
                 <label for="description" accesskey="e">
-                    <%=intl._("Description")%>:(<span class="accessKey">E</span>)
+                    <%=intl._t("Description")%>:(<span class="accessKey">E</span>)
                 </label>
                 <input type="text" size="60" maxlength="80" name="nofilter_description"  id="description" title="Tunnel Description" value="<%=editBean.getTunnelDescription(curTunnel)%>" class="freetext" />                
             </div>
@@ -108,9 +108,9 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
                  
             <div id="accessField" class="rowItem">
          <% if ("streamrclient".equals(tunnelType)) { %>
-                <label><%=intl._("Target")%>:</label>
+                <label><%=intl._t("Target")%>:</label>
          <% } else { %>
-                <label><%=intl._("Access Point")%>:</label>
+                <label><%=intl._t("Access Point")%>:</label>
          <% } /* streamrclient */ %>
             </div>
             <div id="portField" class="rowItem">
@@ -119,7 +119,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
                     <% String value = editBean.getClientPort(curTunnel);
                        if (value == null || "".equals(value.trim())) {
                            out.write(" <font color=\"red\">(");
-                           out.write(intl._("required"));
+                           out.write(intl._t("required"));
                            out.write(")</font>");
                        }
                      %>
@@ -134,14 +134,14 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
                        String targetHost = editBean.getTargetHost(curTunnel);
                        if (targetHost == null || "".equals(targetHost.trim())) {
                            out.write(" <font color=\"red\">(");
-                           out.write(intl._("required"));
+                           out.write(intl._t("required"));
                            out.write(")</font>");
                        }   
           %>
                 </label>
                 <input type="text" size="20" id="targetHost" name="targetHost" title="Target Hostname or IP" value="<%=targetHost%>" class="freetext" />                
          <% } else { %>
-                    <%=intl._("Reachable by")%>(<span class="accessKey">R</span>):
+                    <%=intl._t("Reachable by")%>(<span class="accessKey">R</span>):
                 </label>
                 <select id="reachableBy" name="reachableBy" title="IP for Client Access" class="selectbox">
               <%
@@ -163,7 +163,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
          <% if ("client".equals(tunnelType) || "ircclient".equals(tunnelType)) {
           %><div id="portField" class="rowItem">
                 <label>
-                    <%=intl._("Use SSL?")%>
+                    <%=intl._t("Use SSL?")%>
                 </label>
                 <input value="1" type="checkbox" id="startOnLoad" name="useSSL" title="Clients use SSL to connect" <%=(editBean.isSSLEnabled(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />                
             </div>
@@ -176,41 +176,41 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
             <% if ("httpclient".equals(tunnelType) || "connectclient".equals(tunnelType) || "sockstunnel".equals(tunnelType) || "socksirctunnel".equals(tunnelType)) {
           %><div id="destinationField" class="rowItem">
                 <label for="proxyList" accesskey="x">
-                    <%=intl._("Outproxies")%>(<span class="accessKey">x</span>):
+                    <%=intl._t("Outproxies")%>(<span class="accessKey">x</span>):
                 </label>
                 <input type="text" size="30" id="proxyList" name="proxyList" title="List of Outproxy I2P destinations" value="<%=editBean.getClientDestination(curTunnel)%>" class="freetext" />                
             </div>
               <% if ("httpclient".equals(tunnelType)) {
                  %><div id="destinationField" class="rowItem">
                    <label>
-                       <%=intl._("SSL Outproxies")%>:
+                       <%=intl._t("SSL Outproxies")%>:
                    </label>
                    <input type="text" size="30" id="sslProxyList" name="sslProxies" title="List of Outproxy I2P destinations" value="<%=editBean.getSslProxies(curTunnel)%>" class="freetext" />                
                    </div>
               <% }  // httpclient %>
             <div id="startupField" class="rowItem">
                 <label>
-                    <%=intl._("Use Outproxy Plugin")%>:
+                    <%=intl._t("Use Outproxy Plugin")%>:
                 </label>
                 <input value="1" type="checkbox" id="shared" name="useOutproxyPlugin" title="Use plugin instead of above-listed proxies if available"<%=(editBean.getUseOutproxyPlugin(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />                
-                <span class="comment"><%=intl._("(Check the Box for 'YES')")%></span>
+                <span class="comment"><%=intl._t("(Check the Box for 'YES')")%></span>
             </div>
             <% } else if ("client".equals(tunnelType) || "ircclient".equals(tunnelType) || "streamrclient".equals(tunnelType)) {
           %><div id="destinationField" class="rowItem">
                 <label for="targetDestination" accesskey="T">
-                    <%=intl._("Tunnel Destination")%>(<span class="accessKey">T</span>):
+                    <%=intl._t("Tunnel Destination")%>(<span class="accessKey">T</span>):
                     <% String value2 = editBean.getClientDestination(curTunnel);
                        if (value2 == null || "".equals(value2.trim())) {
                            out.write(" <font color=\"red\">(");
-                           out.write(intl._("required"));
+                           out.write(intl._t("required"));
                            out.write(")</font>");
                        }   
                      %>
                 </label>
                 <input type="text" size="30" id="targetDestination" name="targetDestination" title="Destination of the Tunnel" value="<%=editBean.getClientDestination(curTunnel)%>" class="freetext" />                
-                <span class="comment">(<%=intl._("name, name:port, or destination")%>
+                <span class="comment">(<%=intl._t("name, name:port, or destination")%>
                      <% if ("streamrclient".equals(tunnelType)) { /* deferred resolution unimplemented in streamr client */ %>
-                         - <%=intl._("b32 not recommended")%>
+                         - <%=intl._t("b32 not recommended")%>
                      <% } %> )
                 </span>
             </div>
@@ -218,26 +218,26 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
          <% if (!"streamrclient".equals(tunnelType)) { %>
             <div id="sharedtField" class="rowItem">
                 <label for="shared" accesskey="h">
-                    <%=intl._("Shared Client")%>(<span class="accessKey">h</span>):
+                    <%=intl._t("Shared Client")%>(<span class="accessKey">h</span>):
                 </label>
                 <input value="true" type="checkbox" id="shared" name="shared" title="Share tunnels with other clients"<%=(editBean.isSharedClient(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />                
-                <span class="comment"><%=intl._("(Share tunnels with other clients and irc/httpclients? Change requires restart of client proxy)")%></span>
+                <span class="comment"><%=intl._t("(Share tunnels with other clients and irc/httpclients? Change requires restart of client proxy)")%></span>
             </div>
          <% } // !streamrclient %>
             <div id="startupField" class="rowItem">
                 <label for="startOnLoad" accesskey="a">
-                    <%=intl._("Auto Start")%>(<span class="accessKey">A</span>):
+                    <%=intl._t("Auto Start")%>(<span class="accessKey">A</span>):
                 </label>
                 <input value="1" type="checkbox" id="startOnLoad" name="startOnLoad" title="Start Tunnel Automatically"<%=(editBean.startAutomatically(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />                
-                <span class="comment"><%=intl._("(Check the Box for 'YES')")%></span>
+                <span class="comment"><%=intl._t("(Check the Box for 'YES')")%></span>
             </div>
          <% if ("ircclient".equals(tunnelType)) { %>
             <div id="startupField" class="rowItem">
                 <label for="dcc" accesskey="d">
-                    <%=intl._("Enable DCC")%>:
+                    <%=intl._t("Enable DCC")%>:
                 </label>
                 <input value="1" type="checkbox" id="startOnLoad" name="DCC" title="Enable DCC"<%=(editBean.getDCC(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />                
-                <span class="comment"><%=intl._("(Check the Box for 'YES')")%></span>
+                <span class="comment"><%=intl._t("(Check the Box for 'YES')")%></span>
             </div>
          <% } // ircclient %>
             
@@ -247,8 +247,8 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
 
         <div id="tunnelAdvancedNetworking" class="panel">
             <div class="header">
-                <h4><%=intl._("Advanced networking options")%></h4><br />
-                <span class="comment"><%=intl._("(NOTE: when this client proxy is configured to share tunnels, then these options are for all the shared proxy clients!)")%></span>
+                <h4><%=intl._t("Advanced networking options")%></h4><br />
+                <span class="comment"><%=intl._t("(NOTE: when this client proxy is configured to share tunnels, then these options are for all the shared proxy clients!)")%></span>
             </div>
 
             <div class="separator">
@@ -256,42 +256,42 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
             </div>
             
             <div id="tunnelOptionsField" class="rowItem">
-                <label><%=intl._("Tunnel Options")%>:</label>
+                <label><%=intl._t("Tunnel Options")%>:</label>
             </div>
             <div id="depthField" class="rowItem">
                 <label for="tunnelDepth" accesskey="t">
-                    <%=intl._("Length")%>(<span class="accessKey">t</span>):
+                    <%=intl._t("Length")%>(<span class="accessKey">t</span>):
                 </label>
                 <select id="tunnelDepth" name="tunnelDepth" title="Length of each Tunnel" class="selectbox">
                     <% int tunnelDepth = editBean.getTunnelDepth(curTunnel, 3);
-                  %><option value="0"<%=(tunnelDepth == 0 ? " selected=\"selected\"" : "") %>><%=intl._("0 hop tunnel (no anonymity)")%></option>
-                    <option value="1"<%=(tunnelDepth == 1 ? " selected=\"selected\"" : "") %>><%=intl._("1 hop tunnel (low anonymity)")%></option>
-                    <option value="2"<%=(tunnelDepth == 2 ? " selected=\"selected\"" : "") %>><%=intl._("2 hop tunnel (medium anonymity)")%></option>
-                    <option value="3"<%=(tunnelDepth == 3 ? " selected=\"selected\"" : "") %>><%=intl._("3 hop tunnel (high anonymity)")%></option>
+                  %><option value="0"<%=(tunnelDepth == 0 ? " selected=\"selected\"" : "") %>><%=intl._t("0 hop tunnel (no anonymity)")%></option>
+                    <option value="1"<%=(tunnelDepth == 1 ? " selected=\"selected\"" : "") %>><%=intl._t("1 hop tunnel (low anonymity)")%></option>
+                    <option value="2"<%=(tunnelDepth == 2 ? " selected=\"selected\"" : "") %>><%=intl._t("2 hop tunnel (medium anonymity)")%></option>
+                    <option value="3"<%=(tunnelDepth == 3 ? " selected=\"selected\"" : "") %>><%=intl._t("3 hop tunnel (high anonymity)")%></option>
                 <% if (tunnelDepth > 3) { 
-                %>    <option value="<%=tunnelDepth%>" selected="selected"><%=tunnelDepth%> <%=intl._("hop tunnel (very poor performance)")%></option>
+                %>    <option value="<%=tunnelDepth%>" selected="selected"><%=tunnelDepth%> <%=intl._t("hop tunnel (very poor performance)")%></option>
                 <% }
               %></select>
             </div>
             <div id="varianceField" class="rowItem">
                 <label for="tunnelVariance" accesskey="v">
-                    <%=intl._("Variance")%>(<span class="accessKey">V</span>):
+                    <%=intl._t("Variance")%>(<span class="accessKey">V</span>):
                 </label>
                 <select id="tunnelVariance" name="tunnelVariance" title="Level of Randomization for Tunnel Length" class="selectbox">
                     <% int tunnelVariance = editBean.getTunnelVariance(curTunnel, 0);
-                  %><option value="0"<%=(tunnelVariance  ==  0 ? " selected=\"selected\"" : "") %>><%=intl._("0 hop variance (no randomisation, consistant performance)")%></option>
-                    <option value="1"<%=(tunnelVariance  ==  1 ? " selected=\"selected\"" : "") %>><%=intl._("+ 0-1 hop variance (medium additive randomisation, subtractive performance)")%></option>
-                    <option value="2"<%=(tunnelVariance  ==  2 ? " selected=\"selected\"" : "") %>><%=intl._("+ 0-2 hop variance (high additive randomisation, subtractive performance)")%></option>
-                    <option value="-1"<%=(tunnelVariance == -1 ? " selected=\"selected\"" : "") %>><%=intl._("+/- 0-1 hop variance (standard randomisation, standard performance)")%></option>
-                    <option value="-2"<%=(tunnelVariance == -2 ? " selected=\"selected\"" : "") %>><%=intl._("+/- 0-2 hop variance (not recommended)")%></option>
+                  %><option value="0"<%=(tunnelVariance  ==  0 ? " selected=\"selected\"" : "") %>><%=intl._t("0 hop variance (no randomisation, consistant performance)")%></option>
+                    <option value="1"<%=(tunnelVariance  ==  1 ? " selected=\"selected\"" : "") %>><%=intl._t("+ 0-1 hop variance (medium additive randomisation, subtractive performance)")%></option>
+                    <option value="2"<%=(tunnelVariance  ==  2 ? " selected=\"selected\"" : "") %>><%=intl._t("+ 0-2 hop variance (high additive randomisation, subtractive performance)")%></option>
+                    <option value="-1"<%=(tunnelVariance == -1 ? " selected=\"selected\"" : "") %>><%=intl._t("+/- 0-1 hop variance (standard randomisation, standard performance)")%></option>
+                    <option value="-2"<%=(tunnelVariance == -2 ? " selected=\"selected\"" : "") %>><%=intl._t("+/- 0-2 hop variance (not recommended)")%></option>
                 <% if (tunnelVariance > 2 || tunnelVariance < -2) {
-                %>    <option value="<%=tunnelVariance%>" selected="selected"><%= (tunnelVariance > 2 ? "+ " : "+/- ") %>0-<%=tunnelVariance%> <%=intl._("hop variance")%></option>
+                %>    <option value="<%=tunnelVariance%>" selected="selected"><%= (tunnelVariance > 2 ? "+ " : "+/- ") %>0-<%=tunnelVariance%> <%=intl._t("hop variance")%></option>
                 <% }
               %></select>                
             </div>                
             <div id="countField" class="rowItem">
                 <label for="tunnelQuantity" accesskey="C">
-                    <%=intl._("Count")%>(<span class="accessKey">C</span>):
+                    <%=intl._t("Count")%>(<span class="accessKey">C</span>):
                 </label>
                 <select id="tunnelQuantity" name="tunnelQuantity" title="Number of Tunnels in Group" class="selectbox">
                     <%=editBean.getQuantityOptions(curTunnel)%>
@@ -299,16 +299,16 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
             </div>
             <div id="backupField" class="rowItem">
                 <label for="tunnelBackupQuantity" accesskey="b">
-                    <%=intl._("Backup Count")%>(<span class="accessKey">B</span>):
+                    <%=intl._t("Backup Count")%>(<span class="accessKey">B</span>):
                 </label>
                 <select id="tunnelBackupQuantity" name="tunnelBackupQuantity" title="Number of Reserve Tunnels" class="selectbox">
                     <% int tunnelBackupQuantity = editBean.getTunnelBackupQuantity(curTunnel, 0);
-                  %><option value="0"<%=(tunnelBackupQuantity == 0 ? " selected=\"selected\"" : "") %>><%=intl._("0 backup tunnels (0 redundancy, no added resource usage)")%></option>
-                    <option value="1"<%=(tunnelBackupQuantity == 1 ? " selected=\"selected\"" : "") %>><%=intl._("1 backup tunnel each direction (low redundancy, low resource usage)")%></option>
-                    <option value="2"<%=(tunnelBackupQuantity == 2 ? " selected=\"selected\"" : "") %>><%=intl._("2 backup tunnels each direction (medium redundancy, medium resource usage)")%></option>
-                    <option value="3"<%=(tunnelBackupQuantity == 3 ? " selected=\"selected\"" : "") %>><%=intl._("3 backup tunnels each direction (high redundancy, high resource usage)")%></option>
+                  %><option value="0"<%=(tunnelBackupQuantity == 0 ? " selected=\"selected\"" : "") %>><%=intl._t("0 backup tunnels (0 redundancy, no added resource usage)")%></option>
+                    <option value="1"<%=(tunnelBackupQuantity == 1 ? " selected=\"selected\"" : "") %>><%=intl._t("1 backup tunnel each direction (low redundancy, low resource usage)")%></option>
+                    <option value="2"<%=(tunnelBackupQuantity == 2 ? " selected=\"selected\"" : "") %>><%=intl._t("2 backup tunnels each direction (medium redundancy, medium resource usage)")%></option>
+                    <option value="3"<%=(tunnelBackupQuantity == 3 ? " selected=\"selected\"" : "") %>><%=intl._t("3 backup tunnels each direction (high redundancy, high resource usage)")%></option>
                 <% if (tunnelBackupQuantity > 3) {
-                %>    <option value="<%=tunnelBackupQuantity%>" selected="selected"><%=tunnelBackupQuantity%> <%=intl._("backup tunnels")%></option>
+                %>    <option value="<%=tunnelBackupQuantity%>" selected="selected"><%=tunnelBackupQuantity%> <%=intl._t("backup tunnels")%></option>
                 <% }
               %></select>                
             </div>
@@ -320,20 +320,20 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
          <% if (!"streamrclient".equals(tunnelType)) { %>
             <div id="profileField" class="rowItem">
                 <label for="profile" accesskey="f">
-                    <%=intl._("Profile")%>(<span class="accessKey">f</span>):
+                    <%=intl._t("Profile")%>(<span class="accessKey">f</span>):
                 </label>
                 <select id="profile" name="profile" title="Connection Profile" class="selectbox">
                     <% boolean interactiveProfile = editBean.isInteractive(curTunnel);
-                  %><option <%=(interactiveProfile == true  ? "selected=\"selected\" " : "")%>value="interactive"><%=intl._("interactive connection")%> </option>
-                    <option <%=(interactiveProfile == false ? "selected=\"selected\" " : "")%>value="bulk"><%=intl._("bulk connection (downloads/websites/BT)")%> </option>
+                  %><option <%=(interactiveProfile == true  ? "selected=\"selected\" " : "")%>value="interactive"><%=intl._t("interactive connection")%> </option>
+                    <option <%=(interactiveProfile == false ? "selected=\"selected\" " : "")%>value="bulk"><%=intl._t("bulk connection (downloads/websites/BT)")%> </option>
                 </select>                
             </div>
             <div id="delayConnectField" class="rowItem">
                 <label for="connectDelay" accesskey="y">
-                    <%=intl._("Delay Connect")%>(<span class="accessKey">y</span>):
+                    <%=intl._t("Delay Connect")%>(<span class="accessKey">y</span>):
                 </label>
                 <input value="1000" type="checkbox" id="connectDelay" name="connectDelay" title="Delay Connection"<%=(editBean.shouldDelay(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />                
-                <span class="comment">(<%=intl._("for request/response connections")%>)</span>
+                <span class="comment">(<%=intl._t("for request/response connections")%>)</span>
             </div>
 
             <div class="subdivider">
@@ -342,17 +342,17 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
          <% } // !streamrclient %>
 
             <div id="optionsField" class="rowItem">
-                <label><%=intl._("Router I2CP Address")%>:</label>
+                <label><%=intl._t("Router I2CP Address")%>:</label>
             </div>
             <div id="optionsHostField" class="rowItem">
                 <label for="clientHost" accesskey="o">
-                    <%=intl._("Host")%>(<span class="accessKey">o</span>):
+                    <%=intl._t("Host")%>(<span class="accessKey">o</span>):
                 </label>
                 <input type="text" id="clientHost" name="clientHost" size="20" title="I2CP Hostname or IP" value="<%=editBean.getI2CPHost(curTunnel)%>" class="freetext" <% if (editBean.isRouterContext()) { %> readonly="readonly" <% } %> />                
             </div>
             <div id="optionsPortField" class="rowItem">
                 <label for="clientPort" accesskey="r">
-                    <%=intl._("Port")%>(<span class="accessKey">r</span>):
+                    <%=intl._t("Port")%>(<span class="accessKey">r</span>):
                 </label>
                 <input type="text" id="clientPort" name="clientport" size="20" title="I2CP Port Number" value="<%=editBean.getI2CPPort(curTunnel)%>" class="freetext" <% if (editBean.isRouterContext()) { %> readonly="readonly" <% } %> />                
             </div>
@@ -364,12 +364,12 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
 
             <div id="optionsField" class="rowItem">
                 <label for="reduce" accesskey="c">
-                    <%=intl._("Delay tunnel open until required")%>(<span class="accessKey">D</span>):
+                    <%=intl._t("Delay tunnel open until required")%>(<span class="accessKey">D</span>):
                 </label>
             </div>
             <div id="portField" class="rowItem">
                 <label for="access" accesskey="c">
-                    <%=intl._("Enable")%>:
+                    <%=intl._t("Enable")%>:
                 </label>
                 <input value="1" type="checkbox" id="startOnLoad" name="delayOpen" title="Delay Tunnel Open"<%=(editBean.getDelayOpen(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />                
             </div>
@@ -381,24 +381,24 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
            
             <div id="optionsField" class="rowItem">
                 <label for="reduce" accesskey="d">
-                    <%=intl._("Reduce tunnel quantity when idle")%>(<span class="accessKey">d</span>):
+                    <%=intl._t("Reduce tunnel quantity when idle")%>(<span class="accessKey">d</span>):
                 </label>
             </div>
             <div id="portField" class="rowItem">
                 <label for="access" accesskey="d">
-                    <%=intl._("Enable")%>:
+                    <%=intl._t("Enable")%>:
                 </label>
                 <input value="1" type="checkbox" id="startOnLoad" name="reduce" title="Reduce Tunnels"<%=(editBean.getReduce(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />                
             </div>
             <div id="portField" class="rowItem">
                 <label for="reduceCount" accesskey="d">
-                    <%=intl._("Reduced tunnel count")%>:
+                    <%=intl._t("Reduced tunnel count")%>:
                 </label>
                 <input type="text" id="port" name="reduceCount" size="1" maxlength="1" title="Reduced Tunnel Count" value="<%=editBean.getReduceCount(curTunnel)%>" class="freetext" />                
             </div>
             <div id="portField" class="rowItem">
                 <label for="reduceTime" accesskey="d">
-                    <%=intl._("Idle minutes")%>:
+                    <%=intl._t("Idle minutes")%>:
                 </label>
                 <input type="text" id="port" name="reduceTime" size="4" maxlength="4" title="Reduced Tunnel Idle Time" value="<%=editBean.getReduceTime(curTunnel)%>" class="freetext" />                
             </div>
@@ -409,31 +409,31 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
            
             <div id="optionsField" class="rowItem">
                 <label for="reduce" accesskey="c">
-                    <%=intl._("Close tunnels when idle")%>(<span class="accessKey">C</span>):
+                    <%=intl._t("Close tunnels when idle")%>(<span class="accessKey">C</span>):
                 </label>
             </div>
             <div id="portField" class="rowItem">
                 <label for="access" accesskey="c">
-                    <%=intl._("Enable")%>:
+                    <%=intl._t("Enable")%>:
                 </label>
                 <input value="1" type="checkbox" id="startOnLoad" name="close" title="Close Tunnels"<%=(editBean.getClose(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />                
             </div>
             <div id="portField" class="rowItem">
                 <label for="access" accesskey="c">
-                    <%=intl._("New Keys on Reopen")%>:
+                    <%=intl._t("New Keys on Reopen")%>:
                 </label>
                 <table border="0"><tr><!-- I give up -->
                 <td><input value="1" type="radio" id="startOnLoad" name="newDest" title="New Destination"
                      <%=(editBean.getNewDest(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" /></td>
-                <td><%=intl._("Enable")%></td>
+                <td><%=intl._t("Enable")%></td>
                 <td><input value="0" type="radio" id="startOnLoad" name="newDest" title="New Destination"
                      <%=(editBean.getNewDest(curTunnel) || editBean.getPersistentClientKey(curTunnel) ? "" : " checked=\"checked\"")%> class="tickbox" /></td>
-                <td><%=intl._("Disable")%></td></tr>
+                <td><%=intl._t("Disable")%></td></tr>
                 </table>
             </div>
             <div id="portField" class="rowItem">
                 <label for="reduceTime" accesskey="c">
-                    <%=intl._("Idle minutes")%>:
+                    <%=intl._t("Idle minutes")%>:
                 </label>
                 <input type="text" id="port" name="closeTime" size="4" maxlength="4" title="Close Tunnel Idle Time" value="<%=editBean.getCloseTime(curTunnel)%>" class="freetext" />                
             </div>
@@ -445,16 +445,16 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
          <% if ("client".equals(tunnelType) || "ircclient".equals(tunnelType) || "socksirctunnel".equals(tunnelType) || "sockstunnel".equals(tunnelType)) { %>
             <div id="optionsField" class="rowItem">
                 <label for="privKeyFile" accesskey="k">
-                    <%=intl._("Persistent private key")%>(<span class="accessKey">k</span>):
+                    <%=intl._t("Persistent private key")%>(<span class="accessKey">k</span>):
                 </label>
             </div>
             <div id="portField" class="rowItem">
-                <label><%=intl._("Enable")%>:</label>
+                <label><%=intl._t("Enable")%>:</label>
                 <input value="2" type="radio" id="startOnLoad" name="newDest" title="New Destination"
                      <%=(editBean.getPersistentClientKey(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />                
             </div>
             <div id="reachField" class="rowItem">
-                <label><%=intl._("File")%>:</label>
+                <label><%=intl._t("File")%>:</label>
                 <input type="text" size="30" id="clientHost" name="privKeyFile" title="Path to Private Key File" value="<%=editBean.getPrivateKeyFile(curTunnel)%>" class="freetext" />               
             </div>
          <%
@@ -462,12 +462,12 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
             if (destb64.length() > 0) {
            %>   <div id="destinationField" class="rowItem">
                     <label for="localDestination" accesskey="L">
-                        <%=intl._("Local destination")%>(<span class="accessKey">L</span>):
+                        <%=intl._t("Local destination")%>(<span class="accessKey">L</span>):
                     </label>
                     <textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Read Only: Local Destination (if known)" wrap="off" spellcheck="false"><%=destb64%></textarea>               
                 </div>
                 <div id="destinationField" class="rowItem">
-                    <label><%=intl._("Local Base 32")%>:</label>
+                    <label><%=intl._t("Local Base 32")%>:</label>
                     <%=editBean.getDestHashBase32(curTunnel)%>
                 </div>
          <% } // if destb64  %>
@@ -479,31 +479,31 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
 
          <% if ("httpclient".equals(tunnelType)) { %>
             <div id="optionsField" class="rowItem">
-                <label><%=intl._("Pass User-Agent header through")%>:</label>
+                <label><%=intl._t("Pass User-Agent header through")%>:</label>
             </div>
             <div id="portField" class="rowItem">
-                <label><%=intl._("Enable")%>:</label>
+                <label><%=intl._t("Enable")%>:</label>
                 <input value="1" type="checkbox" id="startOnLoad" name="allowUserAgent" title="Do not spoof user agent string when checked"<%=(editBean.getAllowUserAgent(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />                
             </div><br />
             <div id="optionsField" class="rowItem">
-                <label><%=intl._("Pass Referer header through")%>:</label>
+                <label><%=intl._t("Pass Referer header through")%>:</label>
             </div>
             <div id="portField" class="rowItem">
-                <label><%=intl._("Enable")%>:</label>
+                <label><%=intl._t("Enable")%>:</label>
                 <input value="1" type="checkbox" id="startOnLoad" name="allowReferer" title="Do not block referer header when checked"<%=(editBean.getAllowReferer(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />                
             </div><br />
             <div id="optionsField" class="rowItem">
-                <label><%=intl._("Pass Accept headers through")%>:</label>
+                <label><%=intl._t("Pass Accept headers through")%>:</label>
             </div>
             <div id="portField" class="rowItem">
-                <label><%=intl._("Enable")%>:</label>
+                <label><%=intl._t("Enable")%>:</label>
                 <input value="1" type="checkbox" id="startOnLoad" name="allowAccept" title="Do not block accept headers when checked"<%=(editBean.getAllowAccept(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />                
             </div><br />
             <div id="optionsField" class="rowItem">
-                <label><%=intl._("Allow SSL to I2P addresses")%>:</label>
+                <label><%=intl._t("Allow SSL to I2P addresses")%>:</label>
             </div>
             <div id="portField" class="rowItem">
-                <label><%=intl._("Enable")%>:</label>
+                <label><%=intl._t("Enable")%>:</label>
                 <input value="1" type="checkbox" id="startOnLoad" name="allowInternalSSL" title="Allow SSL to I2P addresses when checked"<%=(editBean.getAllowInternalSSL(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />                
             </div>
             <div class="subdivider">
@@ -516,8 +516,8 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
            %>
             <div id="tunnelOptionsField" class="rowItem">
                 <label>
-                    <%=intl._("Signature type")%>
-                    (<%=intl._("Experts only!")%>)
+                    <%=intl._t("Signature type")%>
+                    (<%=intl._t("Experts only!")%>)
                 </label>
             </div>
             <div id="hostField" class="rowItem">
@@ -558,23 +558,23 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
 
          <% if ("httpclient".equals(tunnelType) || "connectclient".equals(tunnelType) || "sockstunnel".equals(tunnelType) || "socksirctunnel".equals(tunnelType)) { %>
             <div id="accessField" class="rowItem">
-                <label><%=intl._("Local Authorization")%>:</label>
+                <label><%=intl._t("Local Authorization")%>:</label>
             </div>
             <div id="portField" class="rowItem">
                 <label>
-                    <%=intl._("Enable")%>:
+                    <%=intl._t("Enable")%>:
                 </label>
                 <input value="1" type="checkbox" id="startOnLoad" name="proxyAuth" title="Check to require authorization for this service"<%=(editBean.getProxyAuth(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />                
             </div>
             <div id="portField" class="rowItem">
                 <label>
-                    <%=intl._("Username")%>:
+                    <%=intl._t("Username")%>:
                 </label>
                 <input type="text" id="clientPort" name="proxyUsername" title="Set username for this service" value="" class="freetext" />                
             </div>
             <div id="portField" class="rowItem">
                 <label>
-                    <%=intl._("Password")%>:
+                    <%=intl._t("Password")%>:
                 </label>
                 <input type="password" id="clientPort" name="nofilter_proxyPassword" title="Set password for this service" value="" class="freetext" />                
             </div>
@@ -582,23 +582,23 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
                 <hr />
             </div>
             <div id="accessField" class="rowItem">
-                <label><%=intl._("Outproxy Authorization")%>:</label>
+                <label><%=intl._t("Outproxy Authorization")%>:</label>
             </div>
             <div id="portField" class="rowItem">
                 <label>
-                    <%=intl._("Enable")%>:
+                    <%=intl._t("Enable")%>:
                 </label>
                 <input value="1" type="checkbox" id="startOnLoad" name="outproxyAuth" title="Check if the outproxy requires authorization"<%=(editBean.getOutproxyAuth(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />                
             </div>
             <div id="portField" class="rowItem">
                 <label>
-                    <%=intl._("Username")%>:
+                    <%=intl._t("Username")%>:
                 </label>
                 <input type="text" id="clientPort" name="outproxyUsername" title="Enter username required by outproxy" value="<%=editBean.getOutproxyUsername(curTunnel)%>" class="freetext" />                
             </div>
             <div id="portField" class="rowItem">
                 <label>
-                    <%=intl._("Password")%>:
+                    <%=intl._t("Password")%>:
                 </label>
                 <input type="password" id="clientPort" name="nofilter_outproxyPassword" title="Enter password required by outproxy" value="<%=editBean.getOutproxyPassword(curTunnel)%>" class="freetext" />                
             </div>
@@ -609,7 +609,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
 
          <% if ("httpclient".equals(tunnelType)) { %>
             <div id="optionsField" class="rowItem">
-                <label><%=intl._("Jump URL List")%>:</label>
+                <label><%=intl._t("Jump URL List")%>:</label>
             </div>
             <div id="hostField" class="rowItem">
                 <textarea rows="2" style="height: 8em;" cols="60" id="hostField" name="jumpList" title="List of helper URLs to offer when a host is not found in your addressbook" wrap="off" spellcheck="false"><%=editBean.getJumpList(curTunnel)%></textarea>               
@@ -621,7 +621,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
 
             <div id="customOptionsField" class="rowItem">
                 <label for="customOptions" accesskey="u">
-                    <%=intl._("Custom options")%>(<span class="accessKey">u</span>):
+                    <%=intl._t("Custom options")%>(<span class="accessKey">u</span>):
                 </label>
                 <input type="text" id="customOptions" name="nofilter_customOptions" size="60" title="Custom Options" value="<%=editBean.getCustomOptions(curTunnel)%>" class="freetext" spellcheck="false"/>                
             </div>
@@ -634,9 +634,9 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
             <div class="footer">
                 <div class="toolbox">
                     <input type="hidden" value="true" name="removeConfirm" />
-                    <button id="controlCancel" class="control" type="submit" name="action" value="" title="Cancel"><%=intl._("Cancel")%></button>
-                    <button id="controlDelete" <%=(editBean.allowJS() ? "onclick=\"if (!confirm('Are you sure you want to delete?')) { return false; }\" " : "")%>accesskey="D" class="control" type="submit" name="action" value="Delete this proxy" title="Delete this Proxy"><%=intl._("Delete")%>(<span class="accessKey">D</span>)</button>
-                    <button id="controlSave" accesskey="S" class="control" type="submit" name="action" value="Save changes" title="Save Changes"><%=intl._("Save")%>(<span class="accessKey">S</span>)</button>
+                    <button id="controlCancel" class="control" type="submit" name="action" value="" title="Cancel"><%=intl._t("Cancel")%></button>
+                    <button id="controlDelete" <%=(editBean.allowJS() ? "onclick=\"if (!confirm('Are you sure you want to delete?')) { return false; }\" " : "")%>accesskey="D" class="control" type="submit" name="action" value="Delete this proxy" title="Delete this Proxy"><%=intl._t("Delete")%>(<span class="accessKey">D</span>)</button>
+                    <button id="controlSave" accesskey="S" class="control" type="submit" name="action" value="Save changes" title="Save Changes"><%=intl._t("Save")%>(<span class="accessKey">S</span>)</button>
                 </div>
             </div> 
         </div>
diff --git a/apps/i2ptunnel/jsp/editServer.jsp b/apps/i2ptunnel/jsp/editServer.jsp
index 0d7c050937..4a0a7eabfb 100644
--- a/apps/i2ptunnel/jsp/editServer.jsp
+++ b/apps/i2ptunnel/jsp/editServer.jsp
@@ -16,7 +16,7 @@
 %>
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
-    <title><%=intl._("Hidden Services Manager")%> - <%=intl._("Edit Hidden Service")%></title>
+    <title><%=intl._t("Hidden Services Manager")%> - <%=intl._t("Edit Hidden Service")%></title>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
     <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
     <link href="/themes/console/images/favicon.ico" type="image/x-icon" rel="shortcut icon" />
@@ -49,11 +49,11 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
                 if (curTunnel >= 0) {
                     tunnelTypeName = editBean.getTunnelType(curTunnel);
                     tunnelType = editBean.getInternalType(curTunnel);
-                  %><h4><%=intl._("Edit server settings")%></h4><% 
+                  %><h4><%=intl._t("Edit server settings")%></h4><% 
                 } else {
                     tunnelTypeName = editBean.getTypeName(request.getParameter("type"));
                     tunnelType = net.i2p.data.DataHelper.stripHTML(request.getParameter("type"));
-                  %><h4><%=intl._("New server settings")%></h4><% 
+                  %><h4><%=intl._t("New server settings")%></h4><% 
                 } %>
                 <input type="hidden" name="tunnel" value="<%=curTunnel%>" />
                 <input type="hidden" name="nonce" value="<%=editBean.getNextNonce()%>" />
@@ -87,26 +87,26 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
 
             <div id="nameField" class="rowItem">
                 <label for="name" accesskey="N">
-                    <%=intl._("Name")%>(<span class="accessKey">N</span>):
+                    <%=intl._t("Name")%>(<span class="accessKey">N</span>):
                 </label>
                 <input type="text" size="30" maxlength="50" name="name" id="name" title="Tunnel Name" value="<%=editBean.getTunnelName(curTunnel)%>" class="freetext" />               
             </div>
             <div id="typeField" class="rowItem">
-                <label><%=intl._("Type")%>:</label>
+                <label><%=intl._t("Type")%>:</label>
                 <span class="text"><%=tunnelTypeName%></span>
             </div>
             <div id="descriptionField" class="rowItem">
                 <label for="description" accesskey="e">
-                    <%=intl._("Description")%>(<span class="accessKey">e</span>):
+                    <%=intl._t("Description")%>(<span class="accessKey">e</span>):
                 </label>
                 <input type="text" size="60" maxlength="80" name="nofilter_description"  id="description" title="Tunnel Description" value="<%=editBean.getTunnelDescription(curTunnel)%>" class="freetext" />                
             </div>
             <div id="startupField" class="rowItem">
                 <label for="startOnLoad" accesskey="a">
-                    <%=intl._("Auto Start")%>(<span class="accessKey">A</span>):
+                    <%=intl._t("Auto Start")%>(<span class="accessKey">A</span>):
                 </label>
                 <input value="1" type="checkbox" id="startOnLoad" name="startOnLoad" title="Start Tunnel Automatically"<%=(editBean.startAutomatically(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />                
-                <span class="comment"><%=intl._("(Check the Box for 'YES')")%></span>
+                <span class="comment"><%=intl._t("(Check the Box for 'YES')")%></span>
             </div>
                  
             <div class="subdivider">
@@ -115,26 +115,26 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
                  
             <div id="targetField" class="rowItem">
          <% if ("streamrserver".equals(tunnelType)) { %>
-                <label><%=intl._("Access Point")%>:</label>
+                <label><%=intl._t("Access Point")%>:</label>
          <% } else { %>
-                <label><%=intl._("Target")%>:</label>
+                <label><%=intl._t("Target")%>:</label>
          <% } %>
             </div>
          <% if (!"streamrserver".equals(tunnelType)) { %>
             <div id="hostField" class="rowItem">
                 <label for="targetHost" accesskey="H">
-                    <%=intl._("Host")%>(<span class="accessKey">H</span>):
+                    <%=intl._t("Host")%>(<span class="accessKey">H</span>):
                 </label>
                 <input type="text" size="20" id="targetHost" name="targetHost" title="Target Hostname or IP" value="<%=editBean.getTargetHost(curTunnel)%>" class="freetext" />                
             </div>
          <% } /* !streamrserver */ %>
             <div id="portField" class="rowItem">
                 <label for="targetPort" accesskey="P">
-                    <%=intl._("Port")%>(<span class="accessKey">P</span>):
+                    <%=intl._t("Port")%>(<span class="accessKey">P</span>):
                     <% String value = editBean.getTargetPort(curTunnel);
                        if (value == null || "".equals(value.trim())) {
                            out.write(" <font color=\"red\">(");
-                           out.write(intl._("required"));
+                           out.write(intl._t("required"));
                            out.write(")</font>");
                        }   
                      %>
@@ -144,7 +144,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
          <% if (!"streamrserver".equals(tunnelType)) { %>
             <div id="portField" class="rowItem">
                 <label>
-                    <%=intl._("Use SSL?")%>
+                    <%=intl._t("Use SSL?")%>
                 </label>
                 <input value="1" type="checkbox" id="startOnLoad" name="useSSL" title="Use SSL to connect to target" <%=(editBean.isSSLEnabled(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />                
             </div>
@@ -155,7 +155,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
                 <hr />
             </div>
             <div id="accessField" class="rowItem">
-                <label><%=intl._("Access Point")%>:</label>
+                <label><%=intl._t("Access Point")%>:</label>
             </div> 
             <div id="portField" class="rowItem">
            	<label for="port" accesskey="P">
@@ -163,7 +163,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
            	     <% String value4 = editBean.getClientPort(curTunnel);
            	        if (value4 == null || "".equals(value4.trim())) {
            	            out.write(" <font color=\"red\">(");
-           	            out.write(intl._("required"));
+           	            out.write(intl._t("required"));
            	            out.write(")</font>");
            	        }
                	      %>
@@ -174,7 +174,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
          <% if ("httpbidirserver".equals(tunnelType) || "streamrserver".equals(tunnelType)) { %>
             <div id="reachField" class="rowItem">
                 <label for="reachableBy" accesskey="r">
-                    <%=intl._("Reachable by")%>(<span class="accessKey">R</span>):
+                    <%=intl._t("Reachable by")%>(<span class="accessKey">R</span>):
                 </label>
                 <select id="reachableBy" name="reachableBy" title="IP for Client Access" class="selectbox">
               <%
@@ -201,19 +201,19 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
             <% if (("httpserver".equals(tunnelType)) || ("httpbidirserver".equals(tunnelType))) {
           %><div id="websiteField" class="rowItem">
                 <label for="spoofedHost" accesskey="W">
-                    <%=intl._("Website name")%>(<span class="accessKey">W</span>):
+                    <%=intl._t("Website name")%>(<span class="accessKey">W</span>):
                 </label>
                 <input type="text" size="20" id="targetHost" name="spoofedHost" title="Website Host Name" value="<%=editBean.getSpoofedHost(curTunnel)%>" class="freetext" />                
-                <span class="comment"><%=intl._("(leave blank for outproxies)")%></span>
+                <span class="comment"><%=intl._t("(leave blank for outproxies)")%></span>
             </div>
             <% }
           %><div id="privKeyField" class="rowItem">
                 <label for="privKeyFile" accesskey="k">
-                    <%=intl._("Private key file")%>(<span class="accessKey">k</span>):
+                    <%=intl._t("Private key file")%>(<span class="accessKey">k</span>):
                     <% String value3 = editBean.getPrivateKeyFile(curTunnel);
                        if (value3 == null || "".equals(value3.trim())) {
                            out.write(" <font color=\"red\">(");
-                           out.write(intl._("required"));
+                           out.write(intl._t("required"));
                            out.write(")</font>");
                        }
                      %>
@@ -223,7 +223,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
 
             <div id="destinationField" class="rowItem">
                 <label for="localDestination" accesskey="L">
-                    <%=intl._("Local destination")%>(<span class="accessKey">L</span>):
+                    <%=intl._t("Local destination")%>(<span class="accessKey">L</span>):
                 </label>
                 <textarea rows="1" style="height: 3em;" cols="60" readonly="readonly" id="localDestination" title="Read Only: Local Destination (if known)" wrap="off" spellcheck="false"><%=editBean.getDestinationBase64(curTunnel)%></textarea>               
          <% String b64 = editBean.getDestinationBase64(curTunnel);
@@ -232,7 +232,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
                 if (name == null || name.equals(""))
                     name = editBean.getTunnelName(curTunnel);
                 if (!"".equals(name)) { %>
-                    <a href="/susidns/addressbook.jsp?book=private&amp;hostname=<%=name%>&amp;destination=<%=b64%>#add"><%=intl._("Add to local addressbook")%></a>    
+                    <a href="/susidns/addressbook.jsp?book=private&amp;hostname=<%=name%>&amp;destination=<%=b64%>#add"><%=intl._t("Add to local addressbook")%></a>    
          <%     }
             } %>
             </div>
@@ -240,7 +240,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
             <% if (("httpserver".equals(tunnelType)) || ("httpbidirserver".equals(tunnelType))) {
           %><div id="sigField" class="rowItem">
                 <label for="signature">
-                    <%=intl._("Hostname Signature")%>
+                    <%=intl._t("Hostname Signature")%>
                 </label>
                 <input type="text" size="30" readonly="readonly" title="Use to prove that the website name is for this destination" value="<%=editBean.getNameSignature(curTunnel)%>" wrap="off" class="freetext" />                
             </div>
@@ -252,7 +252,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
 
         <div id="tunnelAdvancedNetworking" class="panel">
             <div class="header">
-                <h4><%=intl._("Advanced networking options")%></h4>
+                <h4><%=intl._t("Advanced networking options")%></h4>
             </div>
 
             <div class="separator">
@@ -260,42 +260,42 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
             </div>
             
             <div id="tunnelOptionsField" class="rowItem">
-                <label><%=intl._("Tunnel Options")%>:</label>
+                <label><%=intl._t("Tunnel Options")%>:</label>
             </div>
             <div id="depthField" class="rowItem">
                 <label for="tunnelDepth" accesskey="t">
-                    <%=intl._("Length")%>(<span class="accessKey">t</span>):
+                    <%=intl._t("Length")%>(<span class="accessKey">t</span>):
                 </label>
                 <select id="tunnelDepth" name="tunnelDepth" title="Length of each Tunnel" class="selectbox">
                     <% int tunnelDepth = editBean.getTunnelDepth(curTunnel, 3);
-                  %><option value="0"<%=(tunnelDepth == 0 ? " selected=\"selected\"" : "") %>><%=intl._("0 hop tunnel (no anonymity)")%></option>
-                    <option value="1"<%=(tunnelDepth == 1 ? " selected=\"selected\"" : "") %>><%=intl._("1 hop tunnel (low anonymity)")%></option>
-                    <option value="2"<%=(tunnelDepth == 2 ? " selected=\"selected\"" : "") %>><%=intl._("2 hop tunnel (medium anonymity)")%></option>
-                    <option value="3"<%=(tunnelDepth == 3 ? " selected=\"selected\"" : "") %>><%=intl._("3 hop tunnel (high anonymity)")%></option>
+                  %><option value="0"<%=(tunnelDepth == 0 ? " selected=\"selected\"" : "") %>><%=intl._t("0 hop tunnel (no anonymity)")%></option>
+                    <option value="1"<%=(tunnelDepth == 1 ? " selected=\"selected\"" : "") %>><%=intl._t("1 hop tunnel (low anonymity)")%></option>
+                    <option value="2"<%=(tunnelDepth == 2 ? " selected=\"selected\"" : "") %>><%=intl._t("2 hop tunnel (medium anonymity)")%></option>
+                    <option value="3"<%=(tunnelDepth == 3 ? " selected=\"selected\"" : "") %>><%=intl._t("3 hop tunnel (high anonymity)")%></option>
                 <% if (tunnelDepth > 3) { 
-                %>    <option value="<%=tunnelDepth%>" selected="selected"><%=tunnelDepth%> <%=intl._("hop tunnel (very poor performance)")%></option>
+                %>    <option value="<%=tunnelDepth%>" selected="selected"><%=tunnelDepth%> <%=intl._t("hop tunnel (very poor performance)")%></option>
                 <% }
               %></select>
             </div>
             <div id="varianceField" class="rowItem">
                 <label for="tunnelVariance" accesskey="v">
-                    <%=intl._("Variance")%>(<span class="accessKey">V</span>):
+                    <%=intl._t("Variance")%>(<span class="accessKey">V</span>):
                 </label>
                 <select id="tunnelVariance" name="tunnelVariance" title="Level of Randomization for Tunnel Depth" class="selectbox">
                     <% int tunnelVariance = editBean.getTunnelVariance(curTunnel, 0);
-                  %><option value="0"<%=(tunnelVariance  ==  0 ? " selected=\"selected\"" : "") %>><%=intl._("0 hop variance (no randomisation, consistant performance)")%></option>
-                    <option value="1"<%=(tunnelVariance  ==  1 ? " selected=\"selected\"" : "") %>><%=intl._("+ 0-1 hop variance (medium additive randomisation, subtractive performance)")%></option>
-                    <option value="2"<%=(tunnelVariance  ==  2 ? " selected=\"selected\"" : "") %>><%=intl._("+ 0-2 hop variance (high additive randomisation, subtractive performance)")%></option>
-                    <option value="-1"<%=(tunnelVariance == -1 ? " selected=\"selected\"" : "") %>><%=intl._("+/- 0-1 hop variance (standard randomisation, standard performance)")%></option>
-                    <option value="-2"<%=(tunnelVariance == -2 ? " selected=\"selected\"" : "") %>><%=intl._("+/- 0-2 hop variance (not recommended)")%></option>
+                  %><option value="0"<%=(tunnelVariance  ==  0 ? " selected=\"selected\"" : "") %>><%=intl._t("0 hop variance (no randomisation, consistant performance)")%></option>
+                    <option value="1"<%=(tunnelVariance  ==  1 ? " selected=\"selected\"" : "") %>><%=intl._t("+ 0-1 hop variance (medium additive randomisation, subtractive performance)")%></option>
+                    <option value="2"<%=(tunnelVariance  ==  2 ? " selected=\"selected\"" : "") %>><%=intl._t("+ 0-2 hop variance (high additive randomisation, subtractive performance)")%></option>
+                    <option value="-1"<%=(tunnelVariance == -1 ? " selected=\"selected\"" : "") %>><%=intl._t("+/- 0-1 hop variance (standard randomisation, standard performance)")%></option>
+                    <option value="-2"<%=(tunnelVariance == -2 ? " selected=\"selected\"" : "") %>><%=intl._t("+/- 0-2 hop variance (not recommended)")%></option>
                 <% if (tunnelVariance > 2 || tunnelVariance < -2) {
-                %>    <option value="<%=tunnelVariance%>" selected="selected"><%= (tunnelVariance > 2 ? "+ " : "+/- ") %>0-<%=tunnelVariance%> <%=intl._("hop variance")%></option>
+                %>    <option value="<%=tunnelVariance%>" selected="selected"><%= (tunnelVariance > 2 ? "+ " : "+/- ") %>0-<%=tunnelVariance%> <%=intl._t("hop variance")%></option>
                 <% }
               %></select>                
             </div>
             <div id="countField" class="rowItem">
                 <label for="tunnelQuantity" accesskey="C">
-                    <%=intl._("Count")%>(<span class="accessKey">C</span>):
+                    <%=intl._t("Count")%>(<span class="accessKey">C</span>):
                 </label>
                 <select id="tunnelQuantity" name="tunnelQuantity" title="Number of Tunnels in Group" class="selectbox">
                     <%=editBean.getQuantityOptions(curTunnel)%>
@@ -303,16 +303,16 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
             </div>
             <div id="backupField" class="rowItem">
                 <label for="tunnelBackupQuantity" accesskey="b">
-                    <%=intl._("Backup Count")%>(<span class="accessKey">B</span>):
+                    <%=intl._t("Backup Count")%>(<span class="accessKey">B</span>):
                 </label>
                 <select id="tunnelBackupQuantity" name="tunnelBackupQuantity" title="Number of Reserve Tunnels" class="selectbox">
                     <% int tunnelBackupQuantity = editBean.getTunnelBackupQuantity(curTunnel, 0);
-                  %><option value="0"<%=(tunnelBackupQuantity == 0 ? " selected=\"selected\"" : "") %>><%=intl._("0 backup tunnels (0 redundancy, no added resource usage)")%></option>
-                    <option value="1"<%=(tunnelBackupQuantity == 1 ? " selected=\"selected\"" : "") %>><%=intl._("1 backup tunnel each direction (low redundancy, low resource usage)")%></option>
-                    <option value="2"<%=(tunnelBackupQuantity == 2 ? " selected=\"selected\"" : "") %>><%=intl._("2 backup tunnels each direction (medium redundancy, medium resource usage)")%></option>
-                    <option value="3"<%=(tunnelBackupQuantity == 3 ? " selected=\"selected\"" : "") %>><%=intl._("3 backup tunnels each direction (high redundancy, high resource usage)")%></option>
+                  %><option value="0"<%=(tunnelBackupQuantity == 0 ? " selected=\"selected\"" : "") %>><%=intl._t("0 backup tunnels (0 redundancy, no added resource usage)")%></option>
+                    <option value="1"<%=(tunnelBackupQuantity == 1 ? " selected=\"selected\"" : "") %>><%=intl._t("1 backup tunnel each direction (low redundancy, low resource usage)")%></option>
+                    <option value="2"<%=(tunnelBackupQuantity == 2 ? " selected=\"selected\"" : "") %>><%=intl._t("2 backup tunnels each direction (medium redundancy, medium resource usage)")%></option>
+                    <option value="3"<%=(tunnelBackupQuantity == 3 ? " selected=\"selected\"" : "") %>><%=intl._t("3 backup tunnels each direction (high redundancy, high resource usage)")%></option>
                 <% if (tunnelBackupQuantity > 3) {
-                %>    <option value="<%=tunnelBackupQuantity%>" selected="selected"><%=tunnelBackupQuantity%> <%=intl._("backup tunnels")%></option>
+                %>    <option value="<%=tunnelBackupQuantity%>" selected="selected"><%=tunnelBackupQuantity%> <%=intl._t("backup tunnels")%></option>
                 <% }
               %></select>                
             </div>
@@ -324,12 +324,12 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
          <% if (!"streamrserver".equals(tunnelType)) { %>
             <div id="profileField" class="rowItem">
                 <label for="profile" accesskey="f">
-                    <%=intl._("Profile")%>(<span class="accessKey">f</span>):
+                    <%=intl._t("Profile")%>(<span class="accessKey">f</span>):
                 </label>
                 <select id="profile" name="profile" title="Connection Profile" class="selectbox">
                     <% boolean interactiveProfile = editBean.isInteractive(curTunnel);
-                  %><option <%=(interactiveProfile == true  ? "selected=\"selected\" " : "")%>value="interactive"><%=intl._("interactive connection")%> </option>
-                    <option <%=(interactiveProfile == false ? "selected=\"selected\" " : "")%>value="bulk"><%=intl._("bulk connection (downloads/websites/BT)")%> </option>
+                  %><option <%=(interactiveProfile == true  ? "selected=\"selected\" " : "")%>value="interactive"><%=intl._t("interactive connection")%> </option>
+                    <option <%=(interactiveProfile == false ? "selected=\"selected\" " : "")%>value="bulk"><%=intl._t("bulk connection (downloads/websites/BT)")%> </option>
                 </select>                
             </div> 
 
@@ -339,17 +339,17 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
          <% } /* !streamrserver */ %>
 
             <div id="optionsField" class="rowItem">
-                <label><%=intl._("Router I2CP Address")%>:</label>
+                <label><%=intl._t("Router I2CP Address")%>:</label>
             </div>
             <div id="optionsHostField" class="rowItem">
                 <label for="clientHost" accesskey="o">
-                    <%=intl._("Host")%>(<span class="accessKey">o</span>):
+                    <%=intl._t("Host")%>(<span class="accessKey">o</span>):
                 </label>
                 <input type="text" id="clientHost" name="clientHost" size="20" title="I2CP Hostname or IP" value="<%=editBean.getI2CPHost(curTunnel)%>" class="freetext" <% if (editBean.isRouterContext()) { %> readonly="readonly" <% } %> />                
             </div>
             <div id="optionsPortField" class="rowItem">
                 <label for="clientPort" accesskey="r">
-                    <%=intl._("Port")%>(<span class="accessKey">r</span>):
+                    <%=intl._t("Port")%>(<span class="accessKey">r</span>):
                 </label>
                 <input type="text" id="clientPort" name="clientport" size="20" title="I2CP Port Number" value="<%=editBean.getI2CPPort(curTunnel)%>" class="freetext" <% if (editBean.isRouterContext()) { %> readonly="readonly" <% } %> />                
             </div>
@@ -360,27 +360,27 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
            
             <div id="optionsField" class="rowItem">
                 <label for="encrypt" accesskey="e">
-                    <%=intl._("Encrypt Leaseset")%>(<span class="accessKey">E</span>):
+                    <%=intl._t("Encrypt Leaseset")%>(<span class="accessKey">E</span>):
                 </label>
             </div>
             <div id="portField" class="rowItem">
                 <label for="encrypt" accesskey="e">
-                    <%=intl._("Enable")%>:
+                    <%=intl._t("Enable")%>:
                 </label>
                 <input value="1" type="checkbox" id="startOnLoad" name="encrypt" title="ONLY clients with the encryption key will be able to connect"<%=(editBean.getEncrypt(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />                
             </div>
             <div id="portField" class="rowItem">
                 <label for="encrypt" accesskey="e">
-                    <%=intl._("Encryption Key")%>:
+                    <%=intl._t("Encryption Key")%>:
                 </label>
                 <textarea rows="1" style="height: 3em;" cols="44" id="portField" name="encryptKey" title="Encrypt Key" wrap="off" spellcheck="false"><%=editBean.getEncryptKey(curTunnel)%></textarea>               
             </div>
             <div id="portField" class="rowItem">
                 <label for="force" accesskey="c">
-                    <%=intl._("Generate New Key")%>:
+                    <%=intl._t("Generate New Key")%>:
                 </label>
-                <button accesskey="S" class="control" type="submit" name="action" value="Generate" title="Generate New Key Now"><%=intl._("Generate")%></button>
-                <span class="comment"><%=intl._("(Tunnel must be stopped first)")%></span>
+                <button accesskey="S" class="control" type="submit" name="action" value="Generate" title="Generate New Key Now"><%=intl._t("Generate")%></button>
+                <span class="comment"><%=intl._t("(Tunnel must be stopped first)")%></span>
             </div>
                  
             <div class="subdivider">
@@ -389,20 +389,20 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
            
             <div id="optionsField" class="rowItem">
                 <label for="access" accesskey="s">
-                    <%=intl._("Restricted Access List")%>(<span class="accessKey">s</span>):
+                    <%=intl._t("Restricted Access List")%>(<span class="accessKey">s</span>):
                 </label>
             </div>
             <div id="portField" class="rowItem">
-                <label><%=intl._("Disable")%></label>
+                <label><%=intl._t("Disable")%></label>
                 <input value="0" type="radio" id="startOnLoad" name="accessMode" title="Allow all clients"<%=(editBean.getAccessMode(curTunnel).equals("0") ? " checked=\"checked\"" : "")%> class="tickbox" />                
-                <label><%=intl._("Whitelist")%></label>
+                <label><%=intl._t("Whitelist")%></label>
                 <input value="1" type="radio" id="startOnLoad" name="accessMode" title="Allow listed clients only"<%=(editBean.getAccessMode(curTunnel).equals("1") ? " checked=\"checked\"" : "")%> class="tickbox" />                
-                <label><%=intl._("Blacklist")%></label>
+                <label><%=intl._t("Blacklist")%></label>
                 <input value="2" type="radio" id="startOnLoad" name="accessMode" title="Reject listed clients"<%=(editBean.getAccessMode(curTunnel).equals("2") ? " checked=\"checked\"" : "")%> class="tickbox" />                
             </div>
             <div id="hostField" class="rowItem">
                 <label for="accessList" accesskey="s">
-                    <%=intl._("Access List")%>:
+                    <%=intl._t("Access List")%>:
                 </label>
                 <textarea rows="2" style="height: 8em;" cols="60" id="hostField" name="accessList" title="Access List" wrap="off" spellcheck="false"><%=editBean.getAccessList(curTunnel)%></textarea>               
             </div>
@@ -411,12 +411,12 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
             %><div class="rowItem">
                 <div id="optionsField" class="rowItem">
                     <label>
-                        <%=intl._("Block Access via Inproxies")%>:
+                        <%=intl._t("Block Access via Inproxies")%>:
                     </label>
                 </div>
                 <div id="portField" class="rowItem">
                     <label for="access" accesskey="d">
-                        <%=intl._("Enable")%>:
+                        <%=intl._t("Enable")%>:
                     </label>
                     <input value="1" type="checkbox" id="startOnLoad" name="rejectInproxy" title="Deny inproxy access when enabled"<%=(editBean.isRejectInproxy(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />                
                 </div>
@@ -425,12 +425,12 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
             %><div class="rowItem">
                 <div id="optionsField" class="rowItem">
                     <label>
-                        <%=intl._("Unique Local Address per Client")%>:
+                        <%=intl._t("Unique Local Address per Client")%>:
                     </label>
                 </div>
                 <div id="portField" class="rowItem">
                     <label for="access" accesskey="d">
-                        <%=intl._("Enable")%>:
+                        <%=intl._t("Enable")%>:
                     </label>
                     <input value="1" type="checkbox" id="startOnLoad" name="uniqueLocal" title="Use unique IP addresses for each connecting client (local non-SSL servers only)"<%=(editBean.getUniqueLocal(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />                
                 </div>
@@ -438,12 +438,12 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
             <div class="rowItem">
                 <div id="optionsField" class="rowItem">
                     <label>
-                        <%=intl._("Optimize for Multihoming")%>:
+                        <%=intl._t("Optimize for Multihoming")%>:
                     </label>
                 </div>
                 <div id="portField" class="rowItem">
                     <label for="access" accesskey="d">
-                        <%=intl._("Enable")%>:
+                        <%=intl._t("Enable")%>:
                     </label>
                     <input value="1" type="checkbox" id="startOnLoad" name="multihome" title="Only enable if you are hosting this service on multiple routers"<%=(editBean.getMultihome(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />                
                 </div>
@@ -454,24 +454,24 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
 
             <div class="rowItem">
               <div id="optionsField" class="rowItem">
-                  <label><%=intl._("Inbound connection limits (0=unlimited)")%><br /><%=intl._("Per client")%>:</label>
+                  <label><%=intl._t("Inbound connection limits (0=unlimited)")%><br /><%=intl._t("Per client")%>:</label>
               </div>
               <div id="portField" class="rowItem">
-                  <label><%=intl._("Per minute")%>:</label>
+                  <label><%=intl._t("Per minute")%>:</label>
                   <input type="text" id="port" name="limitMinute" value="<%=editBean.getLimitMinute(curTunnel)%>" class="freetext" />                
               </div>
               <div id="portField" class="rowItem">
-                  <label><%=intl._("Per hour")%>:</label>
+                  <label><%=intl._t("Per hour")%>:</label>
                   <input type="text" id="port" name="limitHour" value="<%=editBean.getLimitHour(curTunnel)%>" class="freetext" />                
               </div>
               <div id="portField" class="rowItem">
-                  <label><%=intl._("Per day")%>:</label>
+                  <label><%=intl._t("Per day")%>:</label>
                   <input type="text" id="port" name="limitDay" value="<%=editBean.getLimitDay(curTunnel)%>" class="freetext" />                
               </div>
             </div>
             <div class="rowItem">
               <div id="optionsField" class="rowItem">
-                  <label><%=intl._("Total")%>:</label>
+                  <label><%=intl._t("Total")%>:</label>
               </div>
               <div id="portField" class="rowItem">
                   <input type="text" id="port" name="totalMinute" value="<%=editBean.getTotalMinute(curTunnel)%>" class="freetext" />                
@@ -485,7 +485,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
             </div>
             <div class="rowItem">
               <div id="optionsField" class="rowItem">
-                  <label><%=intl._("Max concurrent connections (0=unlimited)")%>:</label>
+                  <label><%=intl._t("Max concurrent connections (0=unlimited)")%>:</label>
               </div>
               <div id="portField" class="rowItem">
                   <input type="text" id="port" name="maxStreams" value="<%=editBean.getMaxStreams(curTunnel)%>" class="freetext" />                
@@ -495,20 +495,20 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
             <% if (("httpserver".equals(tunnelType)) || ("httpbidirserver".equals(tunnelType))) {
               %><div class="rowItem">
                   <div id="optionsField" class="rowItem">
-                      <label><%=intl._("POST limits (0=unlimited)")%><br /><%=intl._("Per client")%>:</label>
+                      <label><%=intl._t("POST limits (0=unlimited)")%><br /><%=intl._t("Per client")%>:</label>
                   </div>
                   <div id="portField" class="rowItem">
-                      <label><%=intl._("Per period")%>:</label>
+                      <label><%=intl._t("Per period")%>:</label>
                       <input type="text" id="port" name="postMax" value="<%=editBean.getPostMax(curTunnel)%>" class="freetext" />                
                   </div>
                   <div id="portField" class="rowItem">
-                      <label><%=intl._("Ban minutes")%>:</label>
+                      <label><%=intl._t("Ban minutes")%>:</label>
                       <input type="text" id="port" name="postBanTime" value="<%=editBean.getPostBanTime(curTunnel)%>" class="freetext" />                
                   </div>
                 </div>
                 <div class="rowItem">
                   <div id="optionsField" class="rowItem">
-                      <label><%=intl._("Total")%>:</label>
+                      <label><%=intl._t("Total")%>:</label>
                   </div>
                   <div id="portField" class="rowItem">
                       <input type="text" id="port" name="postTotalMax" value="<%=editBean.getPostTotalMax(curTunnel)%>" class="freetext" />                
@@ -519,7 +519,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
                 </div>
                 <div class="rowItem">
                   <div id="optionsField" class="rowItem">
-                      <label><%=intl._("POST limit period (minutes)")%>:</label>
+                      <label><%=intl._t("POST limit period (minutes)")%>:</label>
                   </div>
                   <div id="portField" class="rowItem">
                       <input type="text" id="port" name="postCheckTime" value="<%=editBean.getPostCheckTime(curTunnel)%>" class="freetext" />                
@@ -532,24 +532,24 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
            
             <div id="optionsField" class="rowItem">
                 <label for="reduce" accesskey="d">
-                    <%=intl._("Reduce tunnel quantity when idle")%>(<span class="accessKey">d</span>):
+                    <%=intl._t("Reduce tunnel quantity when idle")%>(<span class="accessKey">d</span>):
                 </label>
             </div>
             <div id="portField" class="rowItem">
                 <label for="access" accesskey="d">
-                    <%=intl._("Enable")%>:
+                    <%=intl._t("Enable")%>:
                 </label>
                 <input value="1" type="checkbox" id="startOnLoad" name="reduce" title="Reduce Tunnels"<%=(editBean.getReduce(curTunnel) ? " checked=\"checked\"" : "")%> class="tickbox" />                
             </div>
             <div id="portField" class="rowItem">
                 <label for="reduceCount" accesskey="d">
-                    <%=intl._("Reduced tunnel count")%>:
+                    <%=intl._t("Reduced tunnel count")%>:
                 </label>
                 <input type="text" id="port" name="reduceCount" size="1" maxlength="1" title="Reduced Tunnel Count" value="<%=editBean.getReduceCount(curTunnel)%>" class="freetext" />                
             </div>
             <div id="portField" class="rowItem">
                 <label for="reduceTime" accesskey="d">
-                    <%=intl._("Idle minutes")%>:
+                    <%=intl._t("Idle minutes")%>:
                 </label>
                 <input type="text" id="port" name="reduceTime" size="4" maxlength="4" title="Reduced Tunnel Idle Time" value="<%=editBean.getReduceTime(curTunnel)%>" class="freetext" />                
             </div>
@@ -561,34 +561,34 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
 <% /***************** %>
             <div id="tunnelOptionsField" class="rowItem">
                 <label for="cert" accesskey="c">
-                    <%=intl._("New Certificate type")%>(<span class="accessKey">C</span>):
+                    <%=intl._t("New Certificate type")%>(<span class="accessKey">C</span>):
                 </label>
             </div>
             <div id="hostField" class="rowItem">
               <div id="portField" class="rowItem">
-                <label><%=intl._("None")%></label>
+                <label><%=intl._t("None")%></label>
                 <input value="0" type="radio" id="startOnLoad" name="cert" title="No Certificate"<%=(editBean.getCert(curTunnel)==0 ? " checked=\"checked\"" : "")%> class="tickbox" />                
               </div>
               <div id="portField" class="rowItem">
-                <label><%=intl._("Hashcash (effort)")%></label>
+                <label><%=intl._t("Hashcash (effort)")%></label>
                 <input value="1" type="radio" id="startOnLoad" name="cert" title="Hashcash Certificate"<%=(editBean.getCert(curTunnel)==1 ? " checked=\"checked\"" : "")%> class="tickbox" />                
                 <input type="text" id="port" name="effort" size="2" maxlength="2" title="Hashcash Effort" value="<%=editBean.getEffort(curTunnel)%>" class="freetext" />                
               </div>
             </div>
             <div id="portField" class="rowItem">
                 <label for="force" accesskey="c">
-                    <%=intl._("Hashcash Calc Time")%>:
+                    <%=intl._t("Hashcash Calc Time")%>:
                 </label>
-                <button accesskey="S" class="control" type="submit" name="action" value="Estimate" title="Estimate Calculation Time"><%=intl._("Estimate")%></button>
+                <button accesskey="S" class="control" type="submit" name="action" value="Estimate" title="Estimate Calculation Time"><%=intl._t("Estimate")%></button>
             </div>
             <div id="hostField" class="rowItem">
               <div id="portField" class="rowItem">
-                <label><%=intl._("Hidden")%></label>
+                <label><%=intl._t("Hidden")%></label>
                 <input value="2" type="radio" id="startOnLoad" name="cert" title="Hidden Certificate"<%=(editBean.getCert(curTunnel)==2 ? " checked=\"checked\"" : "")%> class="tickbox" />                
               </div>
               <div id="portField" class="rowItem">
                 <label for="signer" accesskey="c">
-                    <%=intl._("Signed (signed by)")%>:
+                    <%=intl._t("Signed (signed by)")%>:
                 </label>
                 <input value="3" type="radio" id="startOnLoad" name="cert" title="Signed Certificate"<%=(editBean.getCert(curTunnel)==3 ? " checked=\"checked\"" : "")%> class="tickbox" />                
                 <input type="text" id="port" name="signer" size="50" title="Cert Signer" value="<%=editBean.getSigner(curTunnel)%>" class="freetext" />                
@@ -596,10 +596,10 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
             </div>
             <div id="portField" class="rowItem">
                 <label for="force" accesskey="c">
-                    <%=intl._("Modify Certificate")%>:
+                    <%=intl._t("Modify Certificate")%>:
                 </label>
-                <button accesskey="S" class="control" type="submit" name="action" value="Modify" title="Force New Cert Now"><%=intl._("Modify")%></button>
-                <span class="comment"><%=intl._("(Tunnel must be stopped first)")%></span>
+                <button accesskey="S" class="control" type="submit" name="action" value="Modify" title="Force New Cert Now"><%=intl._t("Modify")%></button>
+                <span class="comment"><%=intl._t("(Tunnel must be stopped first)")%></span>
             </div>
 <% **********************/ %>
 
@@ -608,8 +608,8 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
            %>
             <div id="tunnelOptionsField" class="rowItem">
                 <label>
-                    <%=intl._("Signature type")%>
-                    (<%=intl._("Experts only! Changes B32!")%>)
+                    <%=intl._t("Signature type")%>
+                    (<%=intl._t("Experts only! Changes B32!")%>)
                 </label>
             </div>
             <div id="hostField" class="rowItem">
@@ -650,7 +650,7 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
                  
             <div id="customOptionsField" class="rowItem">
                 <label for="customOptions" accesskey="u">
-                    <%=intl._("Custom options")%>(<span class="accessKey">u</span>):
+                    <%=intl._t("Custom options")%>(<span class="accessKey">u</span>):
                 </label>
                 <input type="text" id="customOptions" name="nofilter_customOptions" size="60" title="Custom Options" value="<%=editBean.getCustomOptions(curTunnel)%>" class="freetext" spellcheck="false"/>                
             </div>
@@ -663,9 +663,9 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
             <div class="footer">
                 <div class="toolbox">
                     <input type="hidden" value="true" name="removeConfirm" />
-                    <button id="controlCancel" class="control" type="submit" name="action" value="" title="Cancel"><%=intl._("Cancel")%></button>
-                    <button id="controlDelete" <%=(editBean.allowJS() ? "onclick=\"if (!confirm('Are you sure you want to delete?')) { return false; }\" " : "")%>accesskey="D" class="control" type="submit" name="action" value="Delete this proxy" title="Delete this Proxy"><%=intl._("Delete")%>(<span class="accessKey">D</span>)</button>
-                    <button id="controlSave" accesskey="S" class="control" type="submit" name="action" value="Save changes" title="Save Changes"><%=intl._("Save")%>(<span class="accessKey">S</span>)</button>
+                    <button id="controlCancel" class="control" type="submit" name="action" value="" title="Cancel"><%=intl._t("Cancel")%></button>
+                    <button id="controlDelete" <%=(editBean.allowJS() ? "onclick=\"if (!confirm('Are you sure you want to delete?')) { return false; }\" " : "")%>accesskey="D" class="control" type="submit" name="action" value="Delete this proxy" title="Delete this Proxy"><%=intl._t("Delete")%>(<span class="accessKey">D</span>)</button>
+                    <button id="controlSave" accesskey="S" class="control" type="submit" name="action" value="Save changes" title="Save Changes"><%=intl._t("Save")%>(<span class="accessKey">S</span>)</button>
                 </div>
             </div> 
         </div>
diff --git a/apps/i2ptunnel/jsp/index.jsp b/apps/i2ptunnel/jsp/index.jsp
index feff5539cb..da05b233a1 100644
--- a/apps/i2ptunnel/jsp/index.jsp
+++ b/apps/i2ptunnel/jsp/index.jsp
@@ -19,7 +19,7 @@
 <jsp:useBean class="net.i2p.i2ptunnel.web.Messages" id="intl" scope="request" />
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
-    <title><%=intl._("Hidden Services Manager")%></title>
+    <title><%=intl._t("Hidden Services Manager")%></title>
     
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
     <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
@@ -38,7 +38,7 @@
 
     <div id="statusMessagePanel" class="panel">
         <div class="header">
-            <h4><%=intl._("Status Messages")%></h4>
+            <h4><%=intl._t("Status Messages")%></h4>
         </div>
 
         <div class="separator">
@@ -53,7 +53,7 @@
 
         <div class="footer">
             <div class="toolbox">
-                <a class="control" href="list"><%=intl._("Refresh")%></a>
+                <a class="control" href="list"><%=intl._t("Refresh")%></a>
             </div>
         </div>    
     </div>
@@ -66,13 +66,13 @@
         <div class="header"></div>
         <div class="footer">
             <div class="toolbox">
-                <a class="control" href="wizard"><%=intl._("Tunnel Wizard")%></a>
-                <a class="control" href="list?nonce=<%=indexBean.getNextNonce()%>&amp;action=Stop%20all"><%=intl._("Stop All")%></a>
-                <a class="control" href="list?nonce=<%=indexBean.getNextNonce()%>&amp;action=Start%20all"><%=intl._("Start All")%></a>
-                <a class="control" href="list?nonce=<%=indexBean.getNextNonce()%>&amp;action=Restart%20all"><%=intl._("Restart All")%></a>
+                <a class="control" href="wizard"><%=intl._t("Tunnel Wizard")%></a>
+                <a class="control" href="list?nonce=<%=indexBean.getNextNonce()%>&amp;action=Stop%20all"><%=intl._t("Stop All")%></a>
+                <a class="control" href="list?nonce=<%=indexBean.getNextNonce()%>&amp;action=Start%20all"><%=intl._t("Start All")%></a>
+                <a class="control" href="list?nonce=<%=indexBean.getNextNonce()%>&amp;action=Restart%20all"><%=intl._t("Restart All")%></a>
 <%--
                 //this is really bad because it stops and restarts all tunnels, which is probably not what you want
-                <a class="control" href="list?nonce=<%=indexBean.getNextNonce()%>&amp;action=Reload%20configuration"><%=intl._("Reload Config")%></a>
+                <a class="control" href="list?nonce=<%=indexBean.getNextNonce()%>&amp;action=Reload%20configuration"><%=intl._t("Reload Config")%></a>
 --%>
             </div>
         </div> 
@@ -83,23 +83,23 @@
     <div id="localServerTunnelList" class="panel">
         <div class="header">
             
-    <h4><%=intl._("I2P Hidden Services")%></h4>
+    <h4><%=intl._t("I2P Hidden Services")%></h4>
         </div>
 
         
   <div class="separator"> </div>
 
         <div class="nameHeaderField rowItem">
-            <label><%=intl._("Name")%>:</label>
+            <label><%=intl._t("Name")%>:</label>
         </div>
         <div class="previewHeaderField rowItem">
-            <label><%=intl._("Points at")%>:</label>
+            <label><%=intl._t("Points at")%>:</label>
         </div>
         <div class="targetHeaderField rowItem">
-            <label><%=intl._("Preview")%>:</label>
+            <label><%=intl._t("Preview")%>:</label>
         </div>
         <div class="statusHeaderField rowItem">
-            <label><%=intl._("Status")%>:</label>
+            <label><%=intl._t("Status")%>:</label>
 <hr />        </div>
         
         <%
@@ -108,11 +108,11 @@
             
       %>
         <div class="nameField rowItem">
-            <label><%=intl._("Name")%>:</label>
+            <label><%=intl._t("Name")%>:</label>
             <span class="text"><a href="edit?tunnel=<%=curServer%>" title="Edit Server Tunnel Settings for <%=indexBean.getTunnelName(curServer)%>"><%=indexBean.getTunnelName(curServer)%></a></span>
         </div>
         <div class="previewField rowItem">
-            <label><%=intl._("Points at")%>:</label>
+            <label><%=intl._t("Points at")%>:</label>
             <span class="text">
         <%
             if (indexBean.isServerTargetLinkValid(curServer)) {
@@ -135,41 +135,41 @@
         <div class="targetField rowItem">
             <%
             if (("httpserver".equals(indexBean.getInternalType(curServer)) || ("httpbidirserver".equals(indexBean.getInternalType(curServer)))) && indexBean.getTunnelStatus(curServer) == IndexBean.RUNNING) {
-          %><label><%=intl._("Preview")%>:</label>    
-            <a class="control" title="Test HTTP server through I2P" href="http://<%=indexBean.getDestHashBase32(curServer)%>" target="_top"><%=intl._("Preview")%></a>
+          %><label><%=intl._t("Preview")%>:</label>    
+            <a class="control" title="Test HTTP server through I2P" href="http://<%=indexBean.getDestHashBase32(curServer)%>" target="_top"><%=intl._t("Preview")%></a>
             <%
             } else if (indexBean.getTunnelStatus(curServer) == IndexBean.RUNNING) {
-          %><span class="text"><%=intl._("Base32 Address")%>:<br /><%=indexBean.getDestHashBase32(curServer)%></span>
+          %><span class="text"><%=intl._t("Base32 Address")%>:<br /><%=indexBean.getDestHashBase32(curServer)%></span>
         <%
             } else {
-          %><span class="comment"><%=intl._("No Preview")%></span>
+          %><span class="comment"><%=intl._t("No Preview")%></span>
         <%
             }
       %></div>
         <div class="statusField rowItem">
-            <label><%=intl._("Status")%>:</label>
+            <label><%=intl._t("Status")%>:</label>
             <%
             switch (indexBean.getTunnelStatus(curServer)) {
                 case IndexBean.STARTING:
-          %><div class="statusStarting text"><%=intl._("Starting...")%></div>    
-            <a class="control" title="Stop this Tunnel" href="list?nonce=<%=indexBean.getNextNonce()%>&amp;action=stop&amp;tunnel=<%=curServer%>"><%=intl._("Stop")%></a>
+          %><div class="statusStarting text"><%=intl._t("Starting...")%></div>    
+            <a class="control" title="Stop this Tunnel" href="list?nonce=<%=indexBean.getNextNonce()%>&amp;action=stop&amp;tunnel=<%=curServer%>"><%=intl._t("Stop")%></a>
         <%
                 break;
                 case IndexBean.RUNNING:
-          %><div class="statusRunning text"><%=intl._("Running")%></div>    
-            <a class="control" title="Stop this Tunnel" href="list?nonce=<%=indexBean.getNextNonce()%>&amp;action=stop&amp;tunnel=<%=curServer%>"><%=intl._("Stop")%></a>
+          %><div class="statusRunning text"><%=intl._t("Running")%></div>    
+            <a class="control" title="Stop this Tunnel" href="list?nonce=<%=indexBean.getNextNonce()%>&amp;action=stop&amp;tunnel=<%=curServer%>"><%=intl._t("Stop")%></a>
         <%
                 break;
                 case IndexBean.NOT_RUNNING:
-          %><div class="statusNotRunning text"><%=intl._("Stopped")%></div>    
-            <a class="control" title="Start this Tunnel" href="list?nonce=<%=indexBean.getNextNonce()%>&amp;action=start&amp;tunnel=<%=curServer%>"><%=intl._("Start")%></a>
+          %><div class="statusNotRunning text"><%=intl._t("Stopped")%></div>    
+            <a class="control" title="Start this Tunnel" href="list?nonce=<%=indexBean.getNextNonce()%>&amp;action=start&amp;tunnel=<%=curServer%>"><%=intl._t("Start")%></a>
         <%
                 break;
             }
       %></div>
 
         <div class="descriptionField rowItem">
-            <label><%=intl._("Description")%>:</label>
+            <label><%=intl._t("Description")%>:</label>
             <div class="text"><%=indexBean.getTunnelDescription(curServer)%></div>
         </div>
 
@@ -187,15 +187,15 @@
             <form id="addNewServerTunnelForm" action="edit"> 
             <div class="toolbox">
                     
-        <label><%=intl._("New hidden service")%>:</label>
+        <label><%=intl._t("New hidden service")%>:</label>
                     <select name="type">
                         <option value="httpserver">HTTP</option>
-                        <option value="server"><%=intl._("Standard")%></option>
+                        <option value="server"><%=intl._t("Standard")%></option>
                         <option value="httpbidirserver">HTTP bidir</option>
                         <option value="ircserver">IRC</option>
                         <option value="streamrserver">Streamr</option>
                     </select>
-                    <input class="control" type="submit" value="<%=intl._("Create")%>" />
+                    <input class="control" type="submit" value="<%=intl._t("Create")%>" />
                 </div>
             </form>
         </div>
@@ -205,26 +205,26 @@
     <div id="localClientTunnelList" class="panel">
         <div class="header">
             
-    <h4><%=intl._("I2P Client Tunnels")%></h4>
+    <h4><%=intl._t("I2P Client Tunnels")%></h4>
         </div>
 
         
   <div class="separator"> </div>
         
         <div class="nameHeaderField rowItem">
-            <label><%=intl._("Name")%>:</label>
+            <label><%=intl._t("Name")%>:</label>
         </div>
         <div class="portHeaderField rowItem">
-            <label><%=intl._("Port")%>:</label>
+            <label><%=intl._t("Port")%>:</label>
         </div>
         <div class="typeHeaderField rowItem">
-            <label><%=intl._("Type")%>:</label>
+            <label><%=intl._t("Type")%>:</label>
         </div>
         <div class="interfaceHeaderField rowItem">
-            <label><%=intl._("Interface")%>:</label>
+            <label><%=intl._t("Interface")%>:</label>
         </div>
         <div class="statusHeaderField rowItem">
-            <label><%=intl._("Status")%>:</label>
+            <label><%=intl._t("Status")%>:</label>
         </div>
 
         <div class="separator">
@@ -235,11 +235,11 @@
             if (!indexBean.isClient(curClient)) continue;
       %>
         <div class="nameField rowItem">
-            <label><%=intl._("Name")%>:</label>
+            <label><%=intl._t("Name")%>:</label>
             <span class="text"><a href="edit?tunnel=<%=curClient%>" title="Edit Tunnel Settings for <%=indexBean.getTunnelName(curClient)%>"><%=indexBean.getTunnelName(curClient)%></a></span>
         </div>
         <div class="portField rowItem">
-            <label><%=intl._("Port")%>:</label>
+            <label><%=intl._t("Port")%>:</label>
             <span class="text">
          <%
                String cPort= indexBean.getClientPort2(curClient);
@@ -250,18 +250,18 @@
             </span>
         </div>
         <div class="typeField rowItem">
-            <label><%=intl._("Type")%>:</label>
+            <label><%=intl._t("Type")%>:</label>
             <span class="text"><%=indexBean.getTunnelType(curClient)%></span>
         </div>
         <div class="interfaceField rowItem">
-            <label><%=intl._("Interface")%>:</label>
+            <label><%=intl._t("Interface")%>:</label>
             <span class="text">
          <%
                /* should only happen for streamr client */
                String cHost= indexBean.getClientInterface(curClient);
                if (cHost == null || "".equals(cHost)) {
                    out.write("<font color=\"red\">");
-                   out.write(intl._("Host not set"));
+                   out.write(intl._t("Host not set"));
                    out.write("</font>");
                } else {
                    out.write(cHost);
@@ -270,27 +270,27 @@
             </span>
         </div>
         <div class="statusField rowItem">
-            <label><%=intl._("Status")%>:</label>
+            <label><%=intl._t("Status")%>:</label>
             <%
             switch (indexBean.getTunnelStatus(curClient)) {
                 case IndexBean.STARTING:
-          %><div class="statusStarting text"><%=intl._("Starting...")%></div>
-            <a class="control" title="Stop this Tunnel" href="list?nonce=<%=indexBean.getNextNonce()%>&amp;action=stop&amp;tunnel=<%=curClient%>"><%=intl._("Stop")%></a>
+          %><div class="statusStarting text"><%=intl._t("Starting...")%></div>
+            <a class="control" title="Stop this Tunnel" href="list?nonce=<%=indexBean.getNextNonce()%>&amp;action=stop&amp;tunnel=<%=curClient%>"><%=intl._t("Stop")%></a>
         <%
                 break;
                 case IndexBean.STANDBY:
-          %><div class="statusStarting text"><%=intl._("Standby")%></div>
-            <a class="control" title="Stop this Tunnel" href="list?nonce=<%=indexBean.getNextNonce()%>&amp;action=stop&amp;tunnel=<%=curClient%>"><%=intl._("Stop")%></a>
+          %><div class="statusStarting text"><%=intl._t("Standby")%></div>
+            <a class="control" title="Stop this Tunnel" href="list?nonce=<%=indexBean.getNextNonce()%>&amp;action=stop&amp;tunnel=<%=curClient%>"><%=intl._t("Stop")%></a>
         <%
                 break;
                 case IndexBean.RUNNING:
-          %><div class="statusRunning text"><%=intl._("Running")%></div>
-            <a class="control" title="Stop this Tunnel" href="list?nonce=<%=indexBean.getNextNonce()%>&amp;action=stop&amp;tunnel=<%=curClient%>"><%=intl._("Stop")%></a>
+          %><div class="statusRunning text"><%=intl._t("Running")%></div>
+            <a class="control" title="Stop this Tunnel" href="list?nonce=<%=indexBean.getNextNonce()%>&amp;action=stop&amp;tunnel=<%=curClient%>"><%=intl._t("Stop")%></a>
         <%
                 break;
                 case IndexBean.NOT_RUNNING:
-          %><div class="statusNotRunning text"><%=intl._("Stopped")%></div>
-            <a class="control" title="Start this Tunnel" href="list?nonce=<%=indexBean.getNextNonce()%>&amp;action=start&amp;tunnel=<%=curClient%>"><%=intl._("Start")%></a>
+          %><div class="statusNotRunning text"><%=intl._t("Stopped")%></div>
+            <a class="control" title="Start this Tunnel" href="list?nonce=<%=indexBean.getNextNonce()%>&amp;action=start&amp;tunnel=<%=curClient%>"><%=intl._t("Start")%></a>
         <%
                 break;
             }
@@ -300,15 +300,15 @@
             <label>
             <% if ("httpclient".equals(indexBean.getInternalType(curClient)) || "connectclient".equals(indexBean.getInternalType(curClient)) ||
                    "sockstunnel".equals(indexBean.getInternalType(curClient)) || "socksirctunnel".equals(indexBean.getInternalType(curClient))) { %>
-                <%=intl._("Outproxy")%>:
+                <%=intl._t("Outproxy")%>:
             <% } else { %>
-                <%=intl._("Destination")%>:
+                <%=intl._t("Destination")%>:
             <% } %>
             </label>
             <div class="text">
             <%
                if (indexBean.getIsUsingOutproxyPlugin(curClient)) {
-                   %><%=intl._("internal plugin")%><%
+                   %><%=intl._t("internal plugin")%><%
                } else {
                    String cdest = indexBean.getClientDestination(curClient);
                    if (cdest.length() > 70) { // Probably a B64 (a B32 is 60 chars) so truncate
@@ -316,7 +316,7 @@
                    } else if (cdest.length() > 0) {
                        %><%=cdest%><%
                    } else {
-                       %><i><%=intl._("none")%></i><%
+                       %><i><%=intl._t("none")%></i><%
                    }
                } %>
             </div>
@@ -324,7 +324,7 @@
         <% /* TODO SSL outproxy for httpclient if plugin not present */ %>
 
         <div class="descriptionField rowItem">
-            <label><%=intl._("Description")%>:</label>
+            <label><%=intl._t("Description")%>:</label>
             <div class="text"><%=indexBean.getTunnelDescription(curClient)%></div>
         </div>
 
@@ -342,9 +342,9 @@
             <form id="addNewClientTunnelForm" action="edit">
                 <div class="toolbox">
                     
-        <label><%=intl._("New client tunnel")%>:</label>
+        <label><%=intl._t("New client tunnel")%>:</label>
                     <select name="type">
-                        <option value="client"><%=intl._("Standard")%></option>
+                        <option value="client"><%=intl._t("Standard")%></option>
                         <option value="httpclient">HTTP/CONNECT</option>
                         <option value="ircclient">IRC</option>
                         <option value="sockstunnel">SOCKS 4/4a/5</option>
@@ -352,7 +352,7 @@
                         <option value="connectclient">CONNECT</option>
                         <option value="streamrclient">Streamr</option>
                     </select>
-                    <input class="control" type="submit" value="<%=intl._("Create")%>" />
+                    <input class="control" type="submit" value="<%=intl._t("Create")%>" />
                 </div>
             </form>
         </div>
diff --git a/apps/i2ptunnel/jsp/wizard.jsp b/apps/i2ptunnel/jsp/wizard.jsp
index ed08bd1670..6541ffc175 100644
--- a/apps/i2ptunnel/jsp/wizard.jsp
+++ b/apps/i2ptunnel/jsp/wizard.jsp
@@ -53,7 +53,7 @@
 %>
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
-    <title><%=intl._("I2P Tunnel Manager - Tunnel Creation Wizard")%></title>
+    <title><%=intl._t("I2P Tunnel Manager - Tunnel Creation Wizard")%></title>
 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
     <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
@@ -76,19 +76,19 @@
             <div class="header">
                 <%
                 if (curPage == 1) {
-                  %><h4><%=intl._("Server or client tunnel?")%></h4><%
+                  %><h4><%=intl._t("Server or client tunnel?")%></h4><%
                 } else if (curPage == 2) {
-                  %><h4><%=intl._("Tunnel type")%></h4><%
+                  %><h4><%=intl._t("Tunnel type")%></h4><%
                 } else if (curPage == 3) {
-                  %><h4><%=intl._("Tunnel name and description")%></h4><%
+                  %><h4><%=intl._t("Tunnel name and description")%></h4><%
                 } else if (curPage == 4 && tunnelIsClient) {
-                  %><h4><%=intl._("Tunnel destination")%></h4><%
+                  %><h4><%=intl._t("Tunnel destination")%></h4><%
                 } else if (curPage == 5) {
-                  %><h4><%=intl._("Binding address and port")%></h4><%
+                  %><h4><%=intl._t("Binding address and port")%></h4><%
                 } else if (curPage == 6) {
-                  %><h4><%=intl._("Tunnel auto-start")%></h4><%
+                  %><h4><%=intl._t("Tunnel auto-start")%></h4><%
                 } else if (curPage == 7) {
-                  %><h4><%=intl._("Wizard completed")%></h4><%
+                  %><h4><%=intl._t("Wizard completed")%></h4><%
                 } %>
                 <input type="hidden" name="page" value="<%=curPage%>" />
                 <input type="hidden" name="tunnel" value="null" />
@@ -103,17 +103,17 @@
 
             if (curPage == 1) {
             %><p>
-                <%=intl._("This wizard will take you through the various options available for creating tunnels in I2P.")%>
+                <%=intl._t("This wizard will take you through the various options available for creating tunnels in I2P.")%>
             </p>
             <p>
-                <%=intl._("The first thing to decide is whether you want to create a server or a client tunnel.")%>
-                <%=intl._("If you need to connect to a remote service, such as an IRC server inside I2P or a code repository, then you will require a CLIENT tunnel.")%>
-                <%=intl._("On the other hand, if you wish to host a service for others to connect to you'll need to create a SERVER tunnel.")%>
+                <%=intl._t("The first thing to decide is whether you want to create a server or a client tunnel.")%>
+                <%=intl._t("If you need to connect to a remote service, such as an IRC server inside I2P or a code repository, then you will require a CLIENT tunnel.")%>
+                <%=intl._t("On the other hand, if you wish to host a service for others to connect to you'll need to create a SERVER tunnel.")%>
             </p>
             <div id="typeField" class="rowItem">
-                <label><%=intl._("Server Tunnel")%></label>
+                <label><%=intl._t("Server Tunnel")%></label>
                 <input value="false" type="radio" id="baseType" name="isClient" class="tickbox" />
-                <label><%=intl._("Client Tunnel")%></label>
+                <label><%=intl._t("Client Tunnel")%></label>
                 <input value="true" type="radio" id="baseType" name="isClient" class="tickbox" checked="checked" />
             </div><%
             } else {
@@ -126,64 +126,64 @@
 
             if (curPage == 2) {
             %><p>
-                <%=intl._("There are several types of tunnels to choose from:")%>
+                <%=intl._t("There are several types of tunnels to choose from:")%>
             </p>
             <table><%
                 if (tunnelIsClient) {
                 %>
-                <tr><td><%=intl._("Standard")%></td><td>
-                    <%=intl._("Basic tunnel for connecting to a single service inside I2P.")%>
-                    <%=intl._("Try this if none of the tunnel types below fit your requirements, or you don't know what type of tunnel you need.")%>
+                <tr><td><%=intl._t("Standard")%></td><td>
+                    <%=intl._t("Basic tunnel for connecting to a single service inside I2P.")%>
+                    <%=intl._t("Try this if none of the tunnel types below fit your requirements, or you don't know what type of tunnel you need.")%>
                 </td></tr>
                 <tr><td>HTTP</td><td>
-                    <%=intl._("Tunnel that acts as an HTTP proxy for reaching eepsites inside I2P.")%>
-                    <%=intl._("Set your browser to use this tunnel as an http proxy, or set your \"http_proxy\" environment variable for command-line applications in GNU/Linux.")%>
-                    <%=intl._("Websites outside I2P can also be reached if an HTTP proxy within I2P is known.")%>
+                    <%=intl._t("Tunnel that acts as an HTTP proxy for reaching eepsites inside I2P.")%>
+                    <%=intl._t("Set your browser to use this tunnel as an http proxy, or set your \"http_proxy\" environment variable for command-line applications in GNU/Linux.")%>
+                    <%=intl._t("Websites outside I2P can also be reached if an HTTP proxy within I2P is known.")%>
                 </td></tr>
                 <tr><td>IRC</td><td>
-                    <%=intl._("Customised client tunnel specific for IRC connections.")%>
-                    <%=intl._("With this tunnel type, your IRC client will be able to connect to an IRC network inside I2P.")%>
-                    <%=intl._("Each IRC network in I2P that you wish to connect to will require its own tunnel. (See Also, SOCKS IRC)")%>
+                    <%=intl._t("Customised client tunnel specific for IRC connections.")%>
+                    <%=intl._t("With this tunnel type, your IRC client will be able to connect to an IRC network inside I2P.")%>
+                    <%=intl._t("Each IRC network in I2P that you wish to connect to will require its own tunnel. (See Also, SOCKS IRC)")%>
                 </td></tr>
                 <tr><td>SOCKS 4/4a/5</td><td>
-                    <%=intl._("A tunnel that implements the SOCKS protocol.")%>
-                    <%=intl._("This enables both TCP and UDP connections to be made through a SOCKS outproxy within I2P.")%>
+                    <%=intl._t("A tunnel that implements the SOCKS protocol.")%>
+                    <%=intl._t("This enables both TCP and UDP connections to be made through a SOCKS outproxy within I2P.")%>
                 </td></tr>
                 <tr><td>SOCKS IRC</td><td>
-                    <%=intl._("A client tunnel implementing the SOCKS protocol, which is customised for connecting to IRC networks.")%>
-                    <%=intl._("With this tunnel type, IRC networks in I2P can be reached by typing the I2P address into your IRC client, and configuring the IRC client to use this SOCKS tunnel.")%>
-                    <%=intl._("This means that only one I2P tunnel is required rather than a separate tunnel per IRC network.")%>
-                    <%=intl._("IRC networks outside I2P can also be reached if a SOCKS outproxy within I2P is known, though it depends on whether or not the outproxy has been blocked by the IRC network.")%>
+                    <%=intl._t("A client tunnel implementing the SOCKS protocol, which is customised for connecting to IRC networks.")%>
+                    <%=intl._t("With this tunnel type, IRC networks in I2P can be reached by typing the I2P address into your IRC client, and configuring the IRC client to use this SOCKS tunnel.")%>
+                    <%=intl._t("This means that only one I2P tunnel is required rather than a separate tunnel per IRC network.")%>
+                    <%=intl._t("IRC networks outside I2P can also be reached if a SOCKS outproxy within I2P is known, though it depends on whether or not the outproxy has been blocked by the IRC network.")%>
                 </td></tr>
                 <tr><td>CONNECT</td><td>
-                    <%=intl._("A client tunnel that implements the HTTP CONNECT command.")%>
-                    <%=intl._("This enables TCP connections to be made through an HTTP outproxy, assuming the proxy supports the CONNECT command.")%>
+                    <%=intl._t("A client tunnel that implements the HTTP CONNECT command.")%>
+                    <%=intl._t("This enables TCP connections to be made through an HTTP outproxy, assuming the proxy supports the CONNECT command.")%>
                 </td></tr>
                 <tr><td>Streamr</td><td>
-                    <%=intl._("A customised client tunnel for Streamr.")%><%
-                    //XXX TODO<%=intl._("I have no idea what this is.")%>
+                    <%=intl._t("A customised client tunnel for Streamr.")%><%
+                    //XXX TODO<%=intl._t("I have no idea what this is.")%>
                 </td></tr><%
                 } else {
                 %>
-                <tr><td><%=intl._("Standard")%></td><td>
-                    <%=intl._("A basic server tunnel for hosting a generic service inside I2P.")%>
-                    <%=intl._("Try this if none of the tunnel types below fit your requirements, or you don't know what type of tunnel you need.")%>
+                <tr><td><%=intl._t("Standard")%></td><td>
+                    <%=intl._t("A basic server tunnel for hosting a generic service inside I2P.")%>
+                    <%=intl._t("Try this if none of the tunnel types below fit your requirements, or you don't know what type of tunnel you need.")%>
                 </td></tr>
                 <tr><td>HTTP</td><td>
-                    <%=intl._("A server tunnel that is customised for HTTP connections.")%>
-                    <%=intl._("Use this tunnel type if you want to host an eepsite.")%>
+                    <%=intl._t("A server tunnel that is customised for HTTP connections.")%>
+                    <%=intl._t("Use this tunnel type if you want to host an eepsite.")%>
                 </td></tr>
                 <tr><td>HTTP bidir</td><td>
-                    <%=intl._("A customised server tunnel that can both serve HTTP data and connect to other server tunnels.")%>
-                    <%=intl._("This tunnel type is predominantly used when running a Seedless server.")%>
+                    <%=intl._t("A customised server tunnel that can both serve HTTP data and connect to other server tunnels.")%>
+                    <%=intl._t("This tunnel type is predominantly used when running a Seedless server.")%>
                 </td></tr>
                 <tr><td>IRC</td><td>
-                    <%=intl._("A customised server tunnel for hosting IRC networks inside I2P.")%>
-                    <%=intl._("Usually, a separate tunnel needs to be created for each IRC server that is to be accessible inside I2P.")%>
+                    <%=intl._t("A customised server tunnel for hosting IRC networks inside I2P.")%>
+                    <%=intl._t("Usually, a separate tunnel needs to be created for each IRC server that is to be accessible inside I2P.")%>
                 </td></tr>
                 <tr><td>Streamr</td><td>
-                    <%=intl._("A customised server tunnel for Streamr.")%><%
-                    //XXX TODO<%=intl._("I have no idea what this is.")%>
+                    <%=intl._t("A customised server tunnel for Streamr.")%><%
+                    //XXX TODO<%=intl._t("I have no idea what this is.")%>
                 </td></tr><%
                 }
                 %>
@@ -192,7 +192,7 @@
                 <%
                 if (tunnelIsClient) {
                 %><select name="type">
-                    <option value="client"><%=intl._("Standard")%></option>
+                    <option value="client"><%=intl._t("Standard")%></option>
                     <option value="httpclient">HTTP/CONNECT</option>
                     <option value="ircclient">IRC</option>
                     <option value="sockstunnel">SOCKS 4/4a/5</option>
@@ -202,7 +202,7 @@
                 </select><%
                 } else {
                 %><select name="type">
-                    <option value="server"><%=intl._("Standard")%></option>
+                    <option value="server"><%=intl._t("Standard")%></option>
                     <option value="httpserver">HTTP</option>
                     <option value="httpbidirserver">HTTP bidir</option>
                     <option value="ircserver">IRC</option>
@@ -220,18 +220,18 @@
 
             if (curPage == 3) {
             %><p>
-                <%=intl._("Choose a name and description for your tunnel.")%>
-                <%=intl._("These can be anything you want - they are just for ease of identifying the tunnel in the routerconsole.")%>
+                <%=intl._t("Choose a name and description for your tunnel.")%>
+                <%=intl._t("These can be anything you want - they are just for ease of identifying the tunnel in the routerconsole.")%>
             </p>
             <div id="nameField" class="rowItem">
                 <label for="name" accesskey="N">
-                    <%=intl._("Name")%>:(<span class="accessKey">N</span>)
+                    <%=intl._t("Name")%>:(<span class="accessKey">N</span>)
                 </label>
                 <input type="text" size="30" maxlength="50" name="name" id="name" title="Tunnel Name" value="<%=(!"null".equals(request.getParameter("name")) ? net.i2p.data.DataHelper.stripHTML(request.getParameter("name")) : "" ) %>" class="freetext" />
             </div>
             <div id="descriptionField" class="rowItem">
                 <label for="description" accesskey="e">
-                    <%=intl._("Description")%>:(<span class="accessKey">E</span>)
+                    <%=intl._t("Description")%>:(<span class="accessKey">E</span>)
                 </label>
                 <input type="text" size="60" maxlength="80" name="nofilter_description"  id="description" title="Tunnel Description" value="<%=(!"null".equals(request.getParameter("nofilter_description")) ? net.i2p.data.DataHelper.stripHTML(request.getParameter("nofilter_description")) : "" ) %>" class="freetext" />
             </div><%
@@ -248,12 +248,12 @@
               if ("httpclient".equals(tunnelType) || "connectclient".equals(tunnelType) || "sockstunnel".equals(tunnelType) || "socksirctunnel".equals(tunnelType)) {
                 if (curPage == 4) {
           %><p>
-                <%=intl._("If you know of any outproxies for this type of tunnel (either HTTP or SOCKS), fill them in below.")%>
-                <%=intl._("Separate multiple proxies with commas.")%>
+                <%=intl._t("If you know of any outproxies for this type of tunnel (either HTTP or SOCKS), fill them in below.")%>
+                <%=intl._t("Separate multiple proxies with commas.")%>
             </p>
             <div id="destinationField" class="rowItem">
                 <label for="proxyList" accesskey="x">
-                    <%=intl._("Outproxies")%>(<span class="accessKey">x</span>):
+                    <%=intl._t("Outproxies")%>(<span class="accessKey">x</span>):
                 </label>
                 <input type="text" size="30" id="proxyList" name="proxyList" title="List of Outproxy I2P destinations" value="<%=(!"null".equals(request.getParameter("proxyList")) ? net.i2p.data.DataHelper.stripHTML(request.getParameter("proxyList")) : "" ) %>" class="freetext" />
             </div><%
@@ -263,17 +263,17 @@
               } else if ("client".equals(tunnelType) || "ircclient".equals(tunnelType) || "streamrclient".equals(tunnelType)) {
                 if (curPage == 4) {
           %><p>
-                <%=intl._("Type in the I2P destination of the service that this client tunnel should connect to.")%>
-                <%=intl._("This could be the full base 64 destination key, or an I2P URL from your address book.")%>
+                <%=intl._t("Type in the I2P destination of the service that this client tunnel should connect to.")%>
+                <%=intl._t("This could be the full base 64 destination key, or an I2P URL from your address book.")%>
             </p>
             <div id="destinationField" class="rowItem">
                 <label for="targetDestination" accesskey="T">
-                    <%=intl._("Tunnel Destination")%>(<span class="accessKey">T</span>):
+                    <%=intl._t("Tunnel Destination")%>(<span class="accessKey">T</span>):
                 </label>
                 <input type="text" size="30" id="targetDestination" name="targetDestination" title="Destination of the Tunnel" value="<%=(!"null".equals(request.getParameter("targetDestination")) ? net.i2p.data.DataHelper.stripHTML(request.getParameter("targetDestination")) : "" ) %>" class="freetext" />
-                <span class="comment">(<%=intl._("name, name:port, or destination")%>
+                <span class="comment">(<%=intl._t("name, name:port, or destination")%>
                      <% if ("streamrclient".equals(tunnelType)) { /* deferred resolution unimplemented in streamr client */ %>
-                         - <%=intl._("b32 not recommended")%>
+                         - <%=intl._t("b32 not recommended")%>
                      <% } %> )
                 </span>
             </div><%
@@ -290,12 +290,12 @@
             if ((tunnelIsClient && "streamrclient".equals(tunnelType)) || (!tunnelIsClient && !"streamrserver".equals(tunnelType))) {
               if (curPage == 5) {
             %><p>
-                <%=intl._("This is the IP that your service is running on, this is usually on the same machine so 127.0.0.1 is autofilled.")%><%
-                //XXX TODO<%=intl._("For some reason streamrclient also uses this.")%>
+                <%=intl._t("This is the IP that your service is running on, this is usually on the same machine so 127.0.0.1 is autofilled.")%><%
+                //XXX TODO<%=intl._t("For some reason streamrclient also uses this.")%>
             </p>
             <div id="hostField" class="rowItem">
                 <label for="targetHost" accesskey="H">
-                    <%=intl._("Host")%>(<span class="accessKey">H</span>):
+                    <%=intl._t("Host")%>(<span class="accessKey">H</span>):
                 </label>
                 <input type="text" size="20" id="targetHost" name="targetHost" title="Target Hostname or IP" value="<%=(!"null".equals(request.getParameter("targetHost")) ? net.i2p.data.DataHelper.stripHTML(request.getParameter("targetHost")) : "127.0.0.1" ) %>" class="freetext" />
             </div><%
@@ -307,11 +307,11 @@
             if (!tunnelIsClient) {
               if (curPage == 5) {
             %><p>
-                <%=intl._("This is the port that the service is accepting connections on.")%>
+                <%=intl._t("This is the port that the service is accepting connections on.")%>
             </p>
             <div id="portField" class="rowItem">
                 <label for="targetPort" accesskey="P">
-                    <%=intl._("Port")%>(<span class="accessKey">P</span>):
+                    <%=intl._t("Port")%>(<span class="accessKey">P</span>):
                 </label>
                 <input type="text" size="6" maxlength="5" id="targetPort" name="targetPort" title="Target Port Number" value="<%=(!"null".equals(request.getParameter("targetPort")) ? net.i2p.data.DataHelper.stripHTML(request.getParameter("targetPort")) : "" ) %>" class="freetext" />
             </div><%
@@ -323,8 +323,8 @@
             if (tunnelIsClient || "httpbidirserver".equals(tunnelType)) {
               if (curPage == 5) {
             %><p>
-                <%=intl._("This is the port that the client tunnel will be accessed from locally.")%>
-                <%=intl._("This is also the client port for the HTTPBidir server tunnel.")%>
+                <%=intl._t("This is the port that the client tunnel will be accessed from locally.")%>
+                <%=intl._t("This is also the client port for the HTTPBidir server tunnel.")%>
             </p>
             <div id="portField" class="rowItem">
                 <label for="port" accesskey="P">
@@ -340,14 +340,14 @@
             if ((tunnelIsClient && !"streamrclient".equals(tunnelType)) || "httpbidirserver".equals(tunnelType) || "streamrserver".equals(tunnelType)) {
               if (curPage == 5) {
             %><p>
-                <%=intl._("How do you want this tunnel to be accessed? By just this machine, your entire subnet, or external internet?")%>
-                <%=intl._("You will most likely want to just allow 127.0.0.1")%><%
-                //XXX TODO<%=intl._("Note that it is relevant to most Client tunnels, and httpbidirserver and streamrserver tunnels.")%><%
-                //XXX TODO<%=intl._("So the wording may need to change slightly for the client vs. server tunnels.")%>
+                <%=intl._t("How do you want this tunnel to be accessed? By just this machine, your entire subnet, or external internet?")%>
+                <%=intl._t("You will most likely want to just allow 127.0.0.1")%><%
+                //XXX TODO<%=intl._t("Note that it is relevant to most Client tunnels, and httpbidirserver and streamrserver tunnels.")%><%
+                //XXX TODO<%=intl._t("So the wording may need to change slightly for the client vs. server tunnels.")%>
             </p>
             <div id="reachField" class="rowItem">
                 <label for="reachableBy" accesskey="r">
-                    <%=intl._("Reachable by")%>(<span class="accessKey">R</span>):
+                    <%=intl._t("Reachable by")%>(<span class="accessKey">R</span>):
                 </label>
                 <select id="reachableBy" name="reachableBy" title="IP for Client Access" class="selectbox">
               <%
@@ -379,15 +379,15 @@
 
             if (curPage == 6) {
             %><p>
-                <%=intl._("The I2P router can automatically start this tunnel for you when the router is started.")%>
-                <%=intl._("This can be useful for frequently-used tunnels (especially server tunnels), but for tunnels that are only used occassionally it would mean that the I2P router is creating and maintaining unnecessary tunnels.")%>
+                <%=intl._t("The I2P router can automatically start this tunnel for you when the router is started.")%>
+                <%=intl._t("This can be useful for frequently-used tunnels (especially server tunnels), but for tunnels that are only used occassionally it would mean that the I2P router is creating and maintaining unnecessary tunnels.")%>
             </p>
             <div id="startupField" class="rowItem">
                 <label for="startOnLoad" accesskey="a">
-                    <%=intl._("Auto Start")%>(<span class="accessKey">A</span>):
+                    <%=intl._t("Auto Start")%>(<span class="accessKey">A</span>):
                 </label>
                 <input value="1" type="checkbox" id="startOnLoad" name="startOnLoad" title="Start Tunnel Automatically"<%=("1".equals(request.getParameter("startOnLoad")) ? " checked=\"checked\"" : "")%> class="tickbox" />
-                <span class="comment"><%=intl._("(Check the Box for 'YES')")%></span>
+                <span class="comment"><%=intl._t("(Check the Box for 'YES')")%></span>
             </div><%
             } else {
               if ("1".equals(request.getParameter("startOnLoad"))) {
@@ -401,27 +401,27 @@
 
             if (curPage == 7) {
             %><p>
-                <%=intl._("The wizard has now collected enough information to create your tunnel.")%>
-                <%=intl._("Upon clicking the Save button below, the wizard will set up the tunnel, and take you back to the main I2PTunnel page.")%>
+                <%=intl._t("The wizard has now collected enough information to create your tunnel.")%>
+                <%=intl._t("Upon clicking the Save button below, the wizard will set up the tunnel, and take you back to the main I2PTunnel page.")%>
                 <%
                 if ("1".equals(request.getParameter("startOnLoad"))) {
-                %><%=intl._("Because you chose to automatically start the tunnel when the router starts, you don't have to do anything further.")%>
-                <%=intl._("The router will start the tunnel once it has been set up.")%><%
+                %><%=intl._t("Because you chose to automatically start the tunnel when the router starts, you don't have to do anything further.")%>
+                <%=intl._t("The router will start the tunnel once it has been set up.")%><%
                 } else {
-                %><%=intl._("Because you chose not to automatically start the tunnel, you will have to manually start it.")%>
-                <%=intl._("You can do this by clicking the Start button on the main page which corresponds to the new tunnel.")%><%
+                %><%=intl._t("Because you chose not to automatically start the tunnel, you will have to manually start it.")%>
+                <%=intl._t("You can do this by clicking the Start button on the main page which corresponds to the new tunnel.")%><%
                 } %>
             </p>
             <p>
-                <%=intl._("Below is a summary of the options you chose:")%>
+                <%=intl._t("Below is a summary of the options you chose:")%>
             </p>
             <table>
-                <tr><td><%=intl._("Server or client tunnel?")%></td><td>
+                <tr><td><%=intl._t("Server or client tunnel?")%></td><td>
                     <%=(tunnelIsClient ? "Client" : "Server")%>
                 </td></tr>
-                <tr><td><%=intl._("Tunnel type")%></td><td><%
+                <tr><td><%=intl._t("Tunnel type")%></td><td><%
                 if ("client".equals(tunnelType) || "server".equals(tunnelType)) { %>
-                    <%=intl._("Standard")%><%
+                    <%=intl._t("Standard")%><%
                 } else if ("httpclient".equals(tunnelType) || "httpserver".equals(tunnelType)) { %>
                     HTTP<%
                 } else if ("httpbidirserver".equals(tunnelType)) { %>
@@ -438,12 +438,12 @@
                     Streamr<%
                 } %>
                 </td></tr>
-                <tr><td><%=intl._("Tunnel name and description")%></td><td>
+                <tr><td><%=intl._t("Tunnel name and description")%></td><td>
                     <%=net.i2p.data.DataHelper.stripHTML(request.getParameter("name"))%><br />
                     <%=net.i2p.data.DataHelper.stripHTML(request.getParameter("nofilter_description"))%>
                 </td></tr><%
                 if (tunnelIsClient) { %>
-                <tr><td><%=intl._("Tunnel destination")%></td><td><%
+                <tr><td><%=intl._t("Tunnel destination")%></td><td><%
                   if ("httpclient".equals(tunnelType) || "connectclient".equals(tunnelType) || "sockstunnel".equals(tunnelType) || "socksirctunnel".equals(tunnelType)) { %>
                     <%=net.i2p.data.DataHelper.stripHTML(request.getParameter("proxyList"))%><%
                   } else if ("client".equals(tunnelType) || "ircclient".equals(tunnelType) || "streamrclient".equals(tunnelType)) { %>
@@ -451,7 +451,7 @@
                   } %>
                 </td></tr><%
                 } %>
-                <tr><td><%=intl._("Binding address and port")%></td><td><%
+                <tr><td><%=intl._t("Binding address and port")%></td><td><%
                 if ((tunnelIsClient && "streamrclient".equals(tunnelType)) || (!tunnelIsClient && !"streamrserver".equals(tunnelType))) { %>
                     <%=net.i2p.data.DataHelper.stripHTML(request.getParameter("targetHost"))%><br /><%
                 }
@@ -465,7 +465,7 @@
                     <br /><%=net.i2p.data.DataHelper.stripHTML(request.getParameter("reachableBy"))%><%
                 } %>
                 </td></tr>
-                <tr><td><%=intl._("Tunnel auto-start")%></td><td><%
+                <tr><td><%=intl._t("Tunnel auto-start")%></td><td><%
                 if ("1".equals(request.getParameter("startOnLoad"))) { %>
                     Yes<%
                 } else { %>
@@ -474,8 +474,8 @@
                 </td></tr>
             </table>
             <p>
-                <%=intl._("Alongside these basic settings, there are a number of advanced options for tunnel configuration.")%>
-                <%=intl._("The wizard will set reasonably sensible default values for these, but you can view and/or edit these by clicking on the tunnel's name in the main I2PTunnel page.")%>
+                <%=intl._t("Alongside these basic settings, there are a number of advanced options for tunnel configuration.")%>
+                <%=intl._t("The wizard will set reasonably sensible default values for these, but you can view and/or edit these by clicking on the tunnel's name in the main I2PTunnel page.")%>
             </p>
 
             <input type="hidden" name="tunnelDepth" value="3" />
@@ -533,16 +533,16 @@ http://stats.i2p/cgi-bin/jump.cgi?a=" /><%
             <div class="header"></div>
             <div class="footer">
                 <div class="toolbox">
-                    <a class="control" href="list"><%=intl._("Cancel")%></a>
+                    <a class="control" href="list"><%=intl._t("Cancel")%></a>
                     <% if (curPage != 1 && curPage != 7) {
-                    %><button id="controlPrevious" accesskey="P" class="control" type="submit" name="action" value="Previous page" title="Previous Page"><%=intl._("Previous")%>(<span class="accessKey">P</span>)</button><%
+                    %><button id="controlPrevious" accesskey="P" class="control" type="submit" name="action" value="Previous page" title="Previous Page"><%=intl._t("Previous")%>(<span class="accessKey">P</span>)</button><%
                     } %>
                     <% if (curPage == 7) {
-                    %><button id="controlSave" accesskey="S" class="control" type="submit" name="action" value="Save changes" title="Save Tunnel"><%=intl._("Save Tunnel")%>(<span class="accessKey">S</span>)</button><%
+                    %><button id="controlSave" accesskey="S" class="control" type="submit" name="action" value="Save changes" title="Save Tunnel"><%=intl._t("Save Tunnel")%>(<span class="accessKey">S</span>)</button><%
                     } else if (curPage == 6) {
-                    %><button id="controlFinish" accesskey="F" class="control" type="submit" name="action" value="Next page" title="Finish Wizard"><%=intl._("Finish")%>(<span class="accessKey">F</span>)</button><%
+                    %><button id="controlFinish" accesskey="F" class="control" type="submit" name="action" value="Next page" title="Finish Wizard"><%=intl._t("Finish")%>(<span class="accessKey">F</span>)</button><%
                     } else {
-                    %><button id="controlNext" accesskey="N" class="control" type="submit" name="action" value="Next page" title="Next Page"><%=intl._("Next")%>(<span class="accessKey">N</span>)</button><%
+                    %><button id="controlNext" accesskey="N" class="control" type="submit" name="action" value="Next page" title="Next Page"><%=intl._t("Next")%>(<span class="accessKey">N</span>)</button><%
                     } %>
                 </div>
             </div>
diff --git a/apps/ministreaming/java/bundle-messages.sh b/apps/ministreaming/java/bundle-messages.sh
index 062deb2c8b..5c3395114a 100755
--- a/apps/ministreaming/java/bundle-messages.sh
+++ b/apps/ministreaming/java/bundle-messages.sh
@@ -63,13 +63,13 @@ do
 	 	echo "Updating the $i file from the tags..."
 		# extract strings from java and jsp files, and update messages.po files
 		# translate calls must be one of the forms:
-		# _("foo")
+		# _t("foo")
 		# _x("foo")
 		# To start a new translation, copy the header from an old translation to the new .po file,
 		# then ant distclean poupdate.
 		find $JPATHS -name *.java > $TMPFILE
 		xgettext -f $TMPFILE -F -L java --from-code=UTF-8 --add-comments\
-	                 --keyword=_ --keyword=_x \
+	                 --keyword=_t --keyword=_x \
 		         -o ${i}t
 		if [ $? -ne 0 ]
 		then
diff --git a/apps/ministreaming/java/src/net/i2p/client/streaming/I2PSocketException.java b/apps/ministreaming/java/src/net/i2p/client/streaming/I2PSocketException.java
index 5d5e97b65e..4be4d532b0 100644
--- a/apps/ministreaming/java/src/net/i2p/client/streaming/I2PSocketException.java
+++ b/apps/ministreaming/java/src/net/i2p/client/streaming/I2PSocketException.java
@@ -124,7 +124,7 @@ public class I2PSocketException extends SocketException {
 
             default:
                 // Translate this one here, can't do it later
-                return _("Failure code") + ": " + _status;
+                return _t("Failure code") + ": " + _status;
         }
     }
 
@@ -136,13 +136,13 @@ public class I2PSocketException extends SocketException {
         String s = getMessage();
         if (s == null)
             return null;
-        return _(s);
+        return _t(s);
     }
 
     /**
      *  Translate
      */
-    private static String _(String s) {
+    private static String _t(String s) {
         return Translate.getString(s, I2PAppContext.getGlobalContext(), BUNDLE_NAME);
     }
 
diff --git a/apps/routerconsole/java/bundle-messages-countries.sh b/apps/routerconsole/java/bundle-messages-countries.sh
index 38bd5d1864..d4f1b9e71f 100755
--- a/apps/routerconsole/java/bundle-messages-countries.sh
+++ b/apps/routerconsole/java/bundle-messages-countries.sh
@@ -43,7 +43,7 @@ then
 	mkdir -p build
         echo '// Automatically generated pseudo-java for xgettext - do not edit' > $JFILE
 	echo '// Translators may wish to translate a few of these, do not bother to translate all of them!!' >> $JFILE
-	sed -e '/^#/d' -e 's/..,\(..*\)/_("\1");/' $CFILE >> $JFILE
+	sed -e '/^#/d' -e 's/..,\(..*\)/_t("\1");/' $CFILE >> $JFILE
 fi
 
 # add ../java/ so the refs will work in the po file
@@ -76,16 +76,16 @@ do
 	 	echo "Updating the $i file from the tags..."
 		# extract strings from java and jsp files, and update messages.po files
 		# translate calls must be one of the forms:
-		# _("foo")
+		# _t("foo")
 		# _x("foo")
-		# intl._("foo")
+		# intl._t("foo")
 		# intl.title("foo")
 		# In a jsp, you must use a helper or handler that has the context set.
 		# To start a new translation, copy the header from an old translation to the new .po file,
 		# then ant distclean updater.
 		find $JPATHS -name *.java > $TMPFILE
 		xgettext -f $TMPFILE -L java --from-code=UTF-8 --no-location\
-	                 --keyword=_ \
+	                 --keyword=_t \
 		         -o ${i}t
 		if [ $? -ne 0 ]
 		then
diff --git a/apps/routerconsole/java/bundle-messages-news.sh b/apps/routerconsole/java/bundle-messages-news.sh
index 01bf734025..4b71ea4fce 100755
--- a/apps/routerconsole/java/bundle-messages-news.sh
+++ b/apps/routerconsole/java/bundle-messages-news.sh
@@ -62,16 +62,16 @@ do
 	 	echo "Updating the $i file from the tags..."
 		# extract strings from java and jsp files, and update messages.po files
 		# translate calls must be one of the forms:
-		# _("foo")
+		# _t("foo")
 		# _x("foo")
-		# intl._("foo")
+		# intl._t("foo")
 		# intl.title("foo")
 		# In a jsp, you must use a helper or handler that has the context set.
 		# To start a new translation, copy the header from an old translation to the new .po file,
 		# then ant distclean updater.
 		find $JPATHS -name *.java > $TMPFILE
 		xgettext -f $TMPFILE -L java --from-code=UTF-8 --no-location\
-	                 --keyword=_ \
+	                 --keyword=_t \
 		         -o ${i}t
 		if [ $? -ne 0 ]
 		then
diff --git a/apps/routerconsole/java/bundle-messages.sh b/apps/routerconsole/java/bundle-messages.sh
index d6e44060d1..ebe925b3e4 100755
--- a/apps/routerconsole/java/bundle-messages.sh
+++ b/apps/routerconsole/java/bundle-messages.sh
@@ -84,19 +84,19 @@ do
 	 	echo "Updating the $i file from the tags..."
 		# extract strings from java and jsp files, and update messages.po files
 		# translate calls must be one of the forms:
-		# _("foo")
+		# _t("foo")
 		# _x("foo")
-		# intl._("foo")
+		# intl._t("foo")
 		# intl.title("foo")
-		# handler._("foo")
-		# formhandler._("foo")
+		# handler._t("foo")
+		# formhandler._t("foo")
 		# net.i2p.router.web.Messages.getString("foo")
 		# In a jsp, you must use a helper or handler that has the context set.
 		# To start a new translation, copy the header from an old translation to the new .po file,
 		# then ant distclean updater.
 		find $JPATHS -name *.java > $TMPFILE
 		xgettext -f $TMPFILE -F -L java --from-code=UTF-8 --add-comments\
-	                 --keyword=_ --keyword=_x --keyword=intl._ --keyword=intl.title \
+	                 --keyword=_t --keyword=_x --keyword=intl._ --keyword=intl.title \
 	                 --keyword=handler._ --keyword=formhandler._ \
 	                 --keyword=net.i2p.router.web.Messages.getString \
 		         -o ${i}t
diff --git a/apps/routerconsole/java/src/net/i2p/router/update/ConsoleUpdateManager.java b/apps/routerconsole/java/src/net/i2p/router/update/ConsoleUpdateManager.java
index ff0a900160..4c72544ba8 100644
--- a/apps/routerconsole/java/src/net/i2p/router/update/ConsoleUpdateManager.java
+++ b/apps/routerconsole/java/src/net/i2p/router/update/ConsoleUpdateManager.java
@@ -881,7 +881,7 @@ public class ConsoleUpdateManager implements UpdateManager, RouterApp {
                 break;
 
             case PLUGIN:
-                msg = "<b>" + _("New plugin version {0} is available", newVersion) + "</b>";
+                msg = "<b>" + _t("New plugin version {0} is available", newVersion) + "</b>";
                 break;
 
             default:
@@ -961,11 +961,11 @@ public class ConsoleUpdateManager implements UpdateManager, RouterApp {
 
             case PLUGIN:
                 if (!success) {
-                    msg = _("Update check failed for plugin {0}", task.getID());
+                    msg = _t("Update check failed for plugin {0}", task.getID());
                     _log.logAlways(Log.WARN, msg);
                     msg = "<b>" + msg + "</b>";
                 } else if (!newer) {
-                    msg = "<b>" + _("No new version is available for plugin {0}", task.getID()) + "</b>";
+                    msg = "<b>" + _t("No new version is available for plugin {0}", task.getID()) + "</b>";
                 }
                 /// else success.... message for that?
 
@@ -989,7 +989,7 @@ public class ConsoleUpdateManager implements UpdateManager, RouterApp {
             buf.append(_pct.format(pct));
         }
         buf.append("<br>\n");
-        buf.append(_("{0}B transferred", DataHelper.formatSize2(downloaded)));
+        buf.append(_t("{0}B transferred", DataHelper.formatSize2(downloaded)));
         updateStatus(buf.toString());
     }
 
@@ -1048,9 +1048,9 @@ public class ConsoleUpdateManager implements UpdateManager, RouterApp {
             String uri = task.getURI().toString();
             if (uri.startsWith("file:") || task.getMethod() == FILE) {
                 uri = DataHelper.stripHTML(task.getURI().getPath());
-                buf.append(_("Install failed from {0}", uri));
+                buf.append(_t("Install failed from {0}", uri));
             } else {
-                buf.append(_("Transfer failed from {0}", uri));
+                buf.append(_t("Transfer failed from {0}", uri));
             }
             if (reason != null && reason.length() > 0) {
                 buf.append("<br>");
@@ -1325,7 +1325,7 @@ public class ConsoleUpdateManager implements UpdateManager, RouterApp {
      */
     private boolean handleRouterFile(URI uri, String actualVersion, File f, boolean isSU3) {
         String url = uri.toString();
-        updateStatus("<b>" + _("Update downloaded") + "</b>");
+        updateStatus("<b>" + _t("Update downloaded") + "</b>");
         File to = new File(_context.getRouterDir(), Router.UPDATE_FILE);
         String err;
         // Process the file
@@ -1369,7 +1369,7 @@ public class ConsoleUpdateManager implements UpdateManager, RouterApp {
 
             if ("install".equals(policy)) {
                 _log.log(Log.CRIT, "Update was downloaded and verified, restarting to install it");
-                updateStatus("<b>" + _("Update verified") + "</b><br>" + _("Restarting"));
+                updateStatus("<b>" + _t("Update verified") + "</b><br>" + _t("Restarting"));
                 restart();
             } else {
                 _log.logAlways(Log.WARN, "Update was downloaded and verified, will be installed at next restart");
@@ -1378,7 +1378,7 @@ public class ConsoleUpdateManager implements UpdateManager, RouterApp {
             }
         } else {
             _log.log(Log.CRIT, err + " from " + url);
-            updateStatus("<b>" + err + ' ' + _("from {0}", linkify(url)) + " </b>");
+            updateStatus("<b>" + err + ' ' + _t("from {0}", linkify(url)) + " </b>");
         }
         return err == null;
     }
@@ -1389,11 +1389,11 @@ public class ConsoleUpdateManager implements UpdateManager, RouterApp {
      */
     private boolean handleUnsignedFile(URI uri, String lastmod, File updFile) {
         if (FileUtil.verifyZip(updFile)) {
-            updateStatus("<b>" + _("Update downloaded") + "</b>");
+            updateStatus("<b>" + _t("Update downloaded") + "</b>");
         } else {
             updFile.delete();
             String url = uri.toString();
-            updateStatus("<b>" + _("Unsigned update file from {0} is corrupt", url) + "</b>");
+            updateStatus("<b>" + _t("Unsigned update file from {0} is corrupt", url) + "</b>");
             _log.log(Log.CRIT, "Corrupt zip file from " + url);
             return false;
         }
@@ -1413,7 +1413,7 @@ public class ConsoleUpdateManager implements UpdateManager, RouterApp {
             _context.router().saveConfig(NewsHelper.PROP_LAST_UPDATE_TIME, Long.toString(modtime));
             if ("install".equals(policy)) {
                 _log.log(Log.CRIT, "Update was downloaded, restarting to install it");
-                updateStatus("<b>" + _("Update downloaded") + "</b><br>" + _("Restarting"));
+                updateStatus("<b>" + _t("Update downloaded") + "</b><br>" + _t("Restarting"));
                 restart();
             } else {
                 _log.logAlways(Log.WARN, "Update was downloaded, will be installed at next restart");
@@ -1422,7 +1422,7 @@ public class ConsoleUpdateManager implements UpdateManager, RouterApp {
             }
         } else {
             _log.log(Log.CRIT, "Failed copy to " + to);
-            updateStatus("<b>" + _("Failed copy to {0}", to.getAbsolutePath()) + "</b>");
+            updateStatus("<b>" + _t("Failed copy to {0}", to.getAbsolutePath()) + "</b>");
         }
         return copied;
     }
@@ -1453,14 +1453,14 @@ public class ConsoleUpdateManager implements UpdateManager, RouterApp {
     }
 
     /** translate a string */
-    public String _(String s) {
+    public String _t(String s) {
         return Messages.getString(s, _context);
     }
 
     /**
      *  translate a string with a parameter
      */
-    public String _(String s, Object o) {
+    public String _t(String s, Object o) {
         return Messages.getString(s, o, _context);
     }
 
@@ -1468,7 +1468,7 @@ public class ConsoleUpdateManager implements UpdateManager, RouterApp {
      *  translate a string with parameters
      *  @since 0.9.9
      */
-    public String _(String s, Object o, Object o2) {
+    public String _t(String s, Object o, Object o2) {
         return Messages.getString(s, o, o2, _context);
     }
 
diff --git a/apps/routerconsole/java/src/net/i2p/router/update/DevSU3UpdateChecker.java b/apps/routerconsole/java/src/net/i2p/router/update/DevSU3UpdateChecker.java
index 1e392053af..8c5eeed546 100644
--- a/apps/routerconsole/java/src/net/i2p/router/update/DevSU3UpdateChecker.java
+++ b/apps/routerconsole/java/src/net/i2p/router/update/DevSU3UpdateChecker.java
@@ -44,14 +44,14 @@ class DevSU3UpdateChecker extends UpdateRunner {
         if (proxyPort == ConfigUpdateHandler.DEFAULT_PROXY_PORT_INT &&
             proxyHost.equals(ConfigUpdateHandler.DEFAULT_PROXY_HOST) &&
             _context.portMapper().getPort(PortMapper.SVC_HTTP_PROXY) < 0) {
-            String msg = _("HTTP client proxy tunnel must be running");
+            String msg = _t("HTTP client proxy tunnel must be running");
             if (_log.shouldWarn())
                 _log.warn(msg);
             updateStatus("<b>" + msg + "</b>");
             _mgr.notifyCheckComplete(this, false, false);
             return;
         }
-        //updateStatus("<b>" + _("Checking for development build update") + "</b>");
+        //updateStatus("<b>" + _t("Checking for development build update") + "</b>");
         _baos.reset();
         try {
             _get = new PartialEepGet(_context, proxyHost, proxyPort, _baos, _currentURI.toString(), TrustedUpdate.HEADER_BYTES);
@@ -76,7 +76,7 @@ class DevSU3UpdateChecker extends UpdateRunner {
             _mgr.notifyVersionAvailable(this, _currentURI, UpdateType.ROUTER_DEV_SU3, "", UpdateMethod.HTTP,
                                         _urls, newVersion, RouterVersion.FULL_VERSION);
         } else {
-            //updateStatus("<b>" + _("No new version found at {0}", linkify(url)) + "</b>");
+            //updateStatus("<b>" + _t("No new version found at {0}", linkify(url)) + "</b>");
             if (_log.shouldWarn())
                 _log.warn("Found old version \"" + newVersion + "\" at " + url);
         }
diff --git a/apps/routerconsole/java/src/net/i2p/router/update/DevSU3UpdateHandler.java b/apps/routerconsole/java/src/net/i2p/router/update/DevSU3UpdateHandler.java
index 606c781f59..025c9c9f75 100644
--- a/apps/routerconsole/java/src/net/i2p/router/update/DevSU3UpdateHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/update/DevSU3UpdateHandler.java
@@ -88,7 +88,7 @@ class DevSU3UpdateHandler implements Checker, Updater {
             return null;
         UpdateRunner update = new DevSU3UpdateRunner(_context, _mgr, updateSources);
         // set status before thread to ensure UI feedback
-        _mgr.notifyProgress(update, "<b>" + _mgr._("Updating") + "</b>");
+        _mgr.notifyProgress(update, "<b>" + _mgr._t("Updating") + "</b>");
         return update;
     }
 }
diff --git a/apps/routerconsole/java/src/net/i2p/router/update/DevSU3UpdateRunner.java b/apps/routerconsole/java/src/net/i2p/router/update/DevSU3UpdateRunner.java
index 8f9501d4ac..e16bf9c3cf 100644
--- a/apps/routerconsole/java/src/net/i2p/router/update/DevSU3UpdateRunner.java
+++ b/apps/routerconsole/java/src/net/i2p/router/update/DevSU3UpdateRunner.java
@@ -37,7 +37,7 @@ class DevSU3UpdateRunner extends UpdateRunner {
         if (proxyPort == ConfigUpdateHandler.DEFAULT_PROXY_PORT_INT &&
             proxyHost.equals(ConfigUpdateHandler.DEFAULT_PROXY_HOST) &&
             _context.portMapper().getPort(PortMapper.SVC_HTTP_PROXY) < 0) {
-            String msg = _("HTTP client proxy tunnel must be running");
+            String msg = _t("HTTP client proxy tunnel must be running");
             if (_log.shouldWarn())
                 _log.warn(msg);
             updateStatus("<b>" + msg + "</b>");
diff --git a/apps/routerconsole/java/src/net/i2p/router/update/NewsFetcher.java b/apps/routerconsole/java/src/net/i2p/router/update/NewsFetcher.java
index 209d912539..66799737db 100644
--- a/apps/routerconsole/java/src/net/i2p/router/update/NewsFetcher.java
+++ b/apps/routerconsole/java/src/net/i2p/router/update/NewsFetcher.java
@@ -215,13 +215,13 @@ class NewsFetcher extends UpdateRunner {
                             _log.debug("Found version: [" + ver + "]");
                         if (TrustedUpdate.needsUpdate(RouterVersion.VERSION, ver)) {
                             if (NewsHelper.isUpdateDisabled(_context)) {
-                                String msg = _mgr._("In-network updates disabled. Check package manager.");
+                                String msg = _mgr._t("In-network updates disabled. Check package manager.");
                                 _log.logAlways(Log.WARN, "Cannot update to version " + ver + ": " + msg);
                                 _mgr.notifyVersionConstraint(this, _currentURI, ROUTER_SIGNED, "", ver, msg);
                                 return;
                             }
                             if (NewsHelper.isBaseReadonly(_context)) {
-                                String msg = _mgr._("No write permission for I2P install directory.");
+                                String msg = _mgr._t("No write permission for I2P install directory.");
                                 _log.logAlways(Log.WARN, "Cannot update to version " + ver + ": " + msg);
                                 _mgr.notifyVersionConstraint(this, _currentURI, ROUTER_SIGNED, "", ver, msg);
                                 return;
@@ -229,7 +229,7 @@ class NewsFetcher extends UpdateRunner {
                             String minRouter = args.get(MIN_VERSION_KEY);
                             if (minRouter != null) {
                                 if (VersionComparator.comp(RouterVersion.VERSION, minRouter) < 0) {
-                                    String msg = _mgr._("You must first update to version {0}", minRouter);
+                                    String msg = _mgr._t("You must first update to version {0}", minRouter);
                                     _log.logAlways(Log.WARN, "Cannot update to version " + ver + ": " + msg);
                                     _mgr.notifyVersionConstraint(this, _currentURI, ROUTER_SIGNED, "", ver, msg);
                                     return;
@@ -239,7 +239,7 @@ class NewsFetcher extends UpdateRunner {
                             if (minJava != null) {
                                 String ourJava = System.getProperty("java.version");
                                 if (VersionComparator.comp(ourJava, minJava) < 0) {
-                                    String msg = _mgr._("Requires Java version {0} but installed Java version is {1}", minJava, ourJava);
+                                    String msg = _mgr._t("Requires Java version {0} but installed Java version is {1}", minJava, ourJava);
                                     _log.logAlways(Log.WARN, "Cannot update to version " + ver + ": " + msg);
                                     _mgr.notifyVersionConstraint(this, _currentURI, ROUTER_SIGNED, "", ver, msg);
                                     return;
diff --git a/apps/routerconsole/java/src/net/i2p/router/update/PluginUpdateChecker.java b/apps/routerconsole/java/src/net/i2p/router/update/PluginUpdateChecker.java
index ca4c4b9946..05081ee9ed 100644
--- a/apps/routerconsole/java/src/net/i2p/router/update/PluginUpdateChecker.java
+++ b/apps/routerconsole/java/src/net/i2p/router/update/PluginUpdateChecker.java
@@ -52,14 +52,14 @@ class PluginUpdateChecker extends UpdateRunner {
             if (proxyPort == ConfigUpdateHandler.DEFAULT_PROXY_PORT_INT &&
                 proxyHost.equals(ConfigUpdateHandler.DEFAULT_PROXY_HOST) &&
                 _context.portMapper().getPort(PortMapper.SVC_HTTP_PROXY) < 0) {
-                String msg = _("HTTP client proxy tunnel must be running");
+                String msg = _t("HTTP client proxy tunnel must be running");
                 if (_log.shouldWarn())
                     _log.warn(msg);
                 updateStatus("<b>" + msg + "</b>");
                 _mgr.notifyCheckComplete(this, false, false);
                 return;
             }
-            updateStatus("<b>" + _("Checking for update of plugin {0}", _appName) + "</b>");
+            updateStatus("<b>" + _t("Checking for update of plugin {0}", _appName) + "</b>");
             _baos.reset();
             try {
                 _get = new PartialEepGet(_context, proxyHost, proxyPort, _baos, _currentURI.toString(), TrustedUpdate.HEADER_BYTES);
diff --git a/apps/routerconsole/java/src/net/i2p/router/update/PluginUpdateHandler.java b/apps/routerconsole/java/src/net/i2p/router/update/PluginUpdateHandler.java
index b360ecb2f6..46df880391 100644
--- a/apps/routerconsole/java/src/net/i2p/router/update/PluginUpdateHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/update/PluginUpdateHandler.java
@@ -54,7 +54,7 @@ class PluginUpdateHandler implements Checker, Updater {
         }
 
         if (oldVersion == null || updateSources == null) {
-            //updateStatus("<b>" + _("Cannot check, plugin {0} is not installed", appName) + "</b>");
+            //updateStatus("<b>" + _t("Cannot check, plugin {0} is not installed", appName) + "</b>");
             return null;
         }
 
@@ -79,7 +79,7 @@ class PluginUpdateHandler implements Checker, Updater {
 
         UpdateRunner update = new PluginUpdateRunner(_context, _mgr, updateSources, appName, oldVersion);
         // set status before thread to ensure UI feedback
-        _mgr.notifyProgress(update, "<b>" + _mgr._("Updating") + "</b>");
+        _mgr.notifyProgress(update, "<b>" + _mgr._t("Updating") + "</b>");
         return update;
     }
 }
diff --git a/apps/routerconsole/java/src/net/i2p/router/update/PluginUpdateRunner.java b/apps/routerconsole/java/src/net/i2p/router/update/PluginUpdateRunner.java
index 0a58ba9f66..f27215f2ce 100644
--- a/apps/routerconsole/java/src/net/i2p/router/update/PluginUpdateRunner.java
+++ b/apps/routerconsole/java/src/net/i2p/router/update/PluginUpdateRunner.java
@@ -87,15 +87,15 @@ class PluginUpdateRunner extends UpdateRunner {
                 // strip off file:// or just file:
                 String xpi2pfile = _uri.getPath();
                 if(xpi2pfile == null || xpi2pfile.length() == 0) {
-                        statusDone("<b>" + _("Bad URL {0}", _xpi2pURL) + "</b>");
+                        statusDone("<b>" + _t("Bad URL {0}", _xpi2pURL) + "</b>");
                 } else {
                     // copy the contents of from to _updateFile
                     long alreadyTransferred = (new File(xpi2pfile)).getAbsoluteFile().length();
                     if(FileUtil.copy((new File(xpi2pfile)).getAbsolutePath(), _updateFile, true, false)) {
-                        updateStatus("<b>" + _("Attempting to install from file {0}", _xpi2pURL) + "</b>");
+                        updateStatus("<b>" + _t("Attempting to install from file {0}", _xpi2pURL) + "</b>");
                         transferComplete(alreadyTransferred, alreadyTransferred, 0L, _xpi2pURL, _updateFile, false);
                     } else {
-                        statusDone("<b>" + _("Failed to install from file {0}, copy failed.", _xpi2pURL) + "</b>");
+                        statusDone("<b>" + _t("Failed to install from file {0}, copy failed.", _xpi2pURL) + "</b>");
                     }
                 }
             } else {
@@ -108,14 +108,14 @@ class PluginUpdateRunner extends UpdateRunner {
                 if (shouldProxy && proxyPort == ConfigUpdateHandler.DEFAULT_PROXY_PORT_INT &&
                     proxyHost.equals(ConfigUpdateHandler.DEFAULT_PROXY_HOST) &&
                     _context.portMapper().getPort(PortMapper.SVC_HTTP_PROXY) < 0) {
-                    String msg = _("HTTP client proxy tunnel must be running");
+                    String msg = _t("HTTP client proxy tunnel must be running");
                     if (_log.shouldWarn())
                         _log.warn(msg);
                     statusDone("<b>" + msg + "</b>");
                     _mgr.notifyTaskFailed(this, msg, null);
                     return;
                 }
-                updateStatus("<b>" + _("Downloading plugin from {0}", _xpi2pURL) + "</b>");
+                updateStatus("<b>" + _t("Downloading plugin from {0}", _xpi2pURL) + "</b>");
                 try {
                     if (shouldProxy)
                         // 10 retries!!
@@ -136,12 +136,12 @@ class PluginUpdateRunner extends UpdateRunner {
 
         @Override
         public void transferComplete(long alreadyTransferred, long bytesTransferred, long bytesRemaining, String url, String outputFile, boolean notModified) {
-            updateStatus("<b>" + _("Plugin downloaded") + "</b>");
+            updateStatus("<b>" + _t("Plugin downloaded") + "</b>");
             File f = new File(_updateFile);
             File appDir = new SecureDirectory(_context.getConfigDir(), PLUGIN_DIR);
             if ((!appDir.exists()) && (!appDir.mkdir())) {
                 f.delete();
-                statusDone("<b>" + _("Cannot create plugin directory {0}", appDir.getAbsolutePath()) + "</b>");
+                statusDone("<b>" + _t("Cannot create plugin directory {0}", appDir.getAbsolutePath()) + "</b>");
                 return;
             }
             boolean isSU3;
@@ -186,7 +186,7 @@ class PluginUpdateRunner extends UpdateRunner {
             // extract to a zip file whether the sig is good or not, so we can get the properties file
             String err = up.migrateFile(f, to);
             if (err != null) {
-                statusDone("<b>" + err + ' ' + _("from {0}", url) + " </b>");
+                statusDone("<b>" + err + ' ' + _t("from {0}", url) + " </b>");
                 f.delete();
                 to.delete();
                 return;
@@ -202,7 +202,7 @@ class PluginUpdateRunner extends UpdateRunner {
                 f.delete();
                 to.delete();
                 //updateStatus("<b>" + "Plugin contains an invalid key" + ' ' + pubkey + ' ' + signer + "</b>");
-                statusDone("<b>" + _("Plugin from {0} contains an invalid key", url) + "</b>");
+                statusDone("<b>" + _t("Plugin from {0} contains an invalid key", url) + "</b>");
                 return;
             }
             SigningPublicKey spk;
@@ -211,7 +211,7 @@ class PluginUpdateRunner extends UpdateRunner {
             } catch (DataFormatException dfe) {
                 f.delete();
                 to.delete();
-                statusDone("<b>" + _("Plugin from {0} contains an invalid key", url) + "</b>");
+                statusDone("<b>" + _t("Plugin from {0} contains an invalid key", url) + "</b>");
                 return;
             }
 
@@ -244,7 +244,7 @@ class PluginUpdateRunner extends UpdateRunner {
                         _log.error("Failed to verify plugin signature, corrupt plugin or bad signature, signed by: " + signer);
                     else
                         _log.error("Plugin signer \"" + signer + "\" does not match existing signer in plugin.config file \"" + signingKeyName + "\"");
-                    statusDone("<b>" + _("Plugin signature verification of {0} failed", url) + "</b>");
+                    statusDone("<b>" + _t("Plugin signature verification of {0} failed", url) + "</b>");
                     return;
                 }
             } else if (_context.getBooleanProperty(PROP_ALLOW_NEW_KEYS)) {
@@ -254,7 +254,7 @@ class PluginUpdateRunner extends UpdateRunner {
                     f.delete();
                     to.delete();
                     _log.error("Bad key or key mismatch - Failed to add plugin key \"" + pubkey + "\" for plugin signer \"" + signer + "\"");
-                    statusDone("<b>" + _("Plugin signature verification of {0} failed", url) + "</b>");
+                    statusDone("<b>" + _t("Plugin signature verification of {0} failed", url) + "</b>");
                     return;
                 }
                 // ...and try the verify again
@@ -268,7 +268,7 @@ class PluginUpdateRunner extends UpdateRunner {
                     else
                         // shouldn't happen
                         _log.error("Plugin signer \"" + signer + "\" does not match new signer in plugin.config file \"" + signingKeyName + "\"");
-                    statusDone("<b>" + _("Plugin signature verification of {0} failed", url) + "</b>");
+                    statusDone("<b>" + _t("Plugin signature verification of {0} failed", url) + "</b>");
                     return;
                 }
             } else {
@@ -277,7 +277,7 @@ class PluginUpdateRunner extends UpdateRunner {
                 to.delete();
                 _log.error("Untrusted plugin key \"" + pubkey + "\" for plugin signer \"" + signer + "\"");
                 // don't display signer, we're really checking the key not the signer name
-                statusDone("<b>" + _("Plugin not installed - signer is untrusted") + "</b>");
+                statusDone("<b>" + _t("Plugin not installed - signer is untrusted") + "</b>");
                 return;
             }
 
@@ -303,7 +303,7 @@ class PluginUpdateRunner extends UpdateRunner {
                 sudVersion = su3.getVersionString();
                 signingKeyName = su3.getSignerString();
             } catch (IOException ioe) {
-                statusDone("<b>" + ioe + ' ' + _("from {0}", url) + " </b>");
+                statusDone("<b>" + ioe + ' ' + _t("from {0}", url) + " </b>");
                 f.delete();
                 to.delete();
                 return;
@@ -315,7 +315,7 @@ class PluginUpdateRunner extends UpdateRunner {
             if (signer == null || signer.length() <= 0) {
                 f.delete();
                 to.delete();
-                statusDone("<b>" + _("Plugin from {0} contains an invalid key", url) + "</b>");
+                statusDone("<b>" + _t("Plugin from {0} contains an invalid key", url) + "</b>");
                 return;
             }
             if (!signer.equals(signingKeyName)) {
@@ -326,7 +326,7 @@ class PluginUpdateRunner extends UpdateRunner {
                 else
                     // shouldn't happen
                     _log.error("Plugin signer \"" + signer + "\" does not match new signer in plugin.config file \"" + signingKeyName + "\"");
-                statusDone("<b>" + _("Plugin signature verification of {0} failed", url) + "</b>");
+                statusDone("<b>" + _t("Plugin signature verification of {0} failed", url) + "</b>");
                 return;
             }
             processFinal(to, appDir, url, props, sudVersion, null, signer);
@@ -342,7 +342,7 @@ class PluginUpdateRunner extends UpdateRunner {
                 f.delete();
                 to.delete();
                 FileUtil.rmdir(tempDir, false);
-                statusDone("<b>" + _("Plugin from {0} is corrupt", url) + "</b>");
+                statusDone("<b>" + _t("Plugin from {0} is corrupt", url) + "</b>");
                 return null;
             }
             File installProps = new File(tempDir, "plugin.config");
@@ -352,7 +352,7 @@ class PluginUpdateRunner extends UpdateRunner {
             } catch (IOException ioe) {
                 f.delete();
                 to.delete();
-                statusDone("<b>" + _("Plugin from {0} does not contain the required configuration file", url) + "</b>");
+                statusDone("<b>" + _t("Plugin from {0} does not contain the required configuration file", url) + "</b>");
                 return null;
             } finally {
                 // we don't need this anymore, we will unzip again
@@ -374,12 +374,12 @@ class PluginUpdateRunner extends UpdateRunner {
                 version.indexOf("<") >= 0 || version.indexOf(">") >= 0 ||
                 appName.startsWith(".") || appName.indexOf("/") >= 0 || appName.indexOf("\\") >= 0) {
                 to.delete();
-                statusDone("<b>" + _("Plugin from {0} has invalid name or version", url) + "</b>");
+                statusDone("<b>" + _t("Plugin from {0} has invalid name or version", url) + "</b>");
                 return;
             }
             if (!version.equals(sudVersion)) {
                 to.delete();
-                statusDone("<b>" + _("Plugin {0} has mismatched versions", appName) + "</b>");
+                statusDone("<b>" + _t("Plugin {0} has mismatched versions", appName) + "</b>");
                 return;
             }
             // set so notifyComplete() will work
@@ -390,7 +390,7 @@ class PluginUpdateRunner extends UpdateRunner {
             if (minVersion != null &&
                 VersionComparator.comp(CoreVersion.VERSION, minVersion) < 0) {
                 to.delete();
-                statusDone("<b>" + _("This plugin requires I2P version {0} or higher", minVersion) + "</b>");
+                statusDone("<b>" + _t("This plugin requires I2P version {0} or higher", minVersion) + "</b>");
                 return;
             }
 
@@ -398,7 +398,7 @@ class PluginUpdateRunner extends UpdateRunner {
             if (minVersion != null &&
                 VersionComparator.comp(System.getProperty("java.version"), minVersion) < 0) {
                 to.delete();
-                statusDone("<b>" + _("This plugin requires Java version {0} or higher", minVersion) + "</b>");
+                statusDone("<b>" + _t("This plugin requires Java version {0} or higher", minVersion) + "</b>");
                 return;
             }
 
@@ -407,7 +407,7 @@ class PluginUpdateRunner extends UpdateRunner {
             if (destDir.exists()) {
                 if (Boolean.valueOf(props.getProperty("install-only")).booleanValue()) {
                     to.delete();
-                    statusDone("<b>" + _("Downloaded plugin is for new installs only, but the plugin is already installed", url) + "</b>");
+                    statusDone("<b>" + _t("Downloaded plugin is for new installs only, but the plugin is already installed", url) + "</b>");
                     return;
                 }
                 // compare previous version
@@ -417,7 +417,7 @@ class PluginUpdateRunner extends UpdateRunner {
                     DataHelper.loadProps(oldProps, oldPropFile);
                 } catch (IOException ioe) {
                     to.delete();
-                    statusDone("<b>" + _("Installed plugin does not contain the required configuration file", url) + "</b>");
+                    statusDone("<b>" + _t("Installed plugin does not contain the required configuration file", url) + "</b>");
                     return;
                 }
                 String oldPubkey = oldProps.getProperty("key");
@@ -425,28 +425,28 @@ class PluginUpdateRunner extends UpdateRunner {
                 String oldAppName = oldProps.getProperty("name");
                 if ((pubkey != null && !pubkey.equals(oldPubkey)) || (!signer.equals(oldKeyName)) || (!appName.equals(oldAppName))) {
                     to.delete();
-                    statusDone("<b>" + _("Signature of downloaded plugin does not match installed plugin") + "</b>");
+                    statusDone("<b>" + _t("Signature of downloaded plugin does not match installed plugin") + "</b>");
                     return;
                 }
                 String oldVersion = oldProps.getProperty("version");
                 if (oldVersion == null ||
                     VersionComparator.comp(oldVersion, version) >= 0) {
                     to.delete();
-                    statusDone("<b>" + _("Downloaded plugin version {0} is not newer than installed plugin", version) + "</b>");
+                    statusDone("<b>" + _t("Downloaded plugin version {0} is not newer than installed plugin", version) + "</b>");
                     return;
                 }
                 minVersion = ConfigClientsHelper.stripHTML(props, "min-installed-version");
                 if (minVersion != null &&
                     VersionComparator.comp(minVersion, oldVersion) > 0) {
                     to.delete();
-                    statusDone("<b>" + _("Plugin update requires installed plugin version {0} or higher", minVersion) + "</b>");
+                    statusDone("<b>" + _t("Plugin update requires installed plugin version {0} or higher", minVersion) + "</b>");
                     return;
                 }
                 String maxVersion = ConfigClientsHelper.stripHTML(props, "max-installed-version");
                 if (maxVersion != null &&
                     VersionComparator.comp(maxVersion, oldVersion) < 0) {
                     to.delete();
-                    statusDone("<b>" + _("Plugin update requires installed plugin version {0} or lower", maxVersion) + "</b>");
+                    statusDone("<b>" + _t("Plugin update requires installed plugin version {0} or lower", maxVersion) + "</b>");
                     return;
                 }
                 oldVersion = LogsHelper.jettyVersion();
@@ -454,14 +454,14 @@ class PluginUpdateRunner extends UpdateRunner {
                 if (minVersion != null &&
                     VersionComparator.comp(minVersion, oldVersion) > 0) {
                     to.delete();
-                    statusDone("<b>" + _("Plugin requires Jetty version {0} or higher", minVersion) + "</b>");
+                    statusDone("<b>" + _t("Plugin requires Jetty version {0} or higher", minVersion) + "</b>");
                     return;
                 }
                 maxVersion = ConfigClientsHelper.stripHTML(props, "max-jetty-version");
                 if (maxVersion != null &&
                     VersionComparator.comp(maxVersion, oldVersion) < 0) {
                     to.delete();
-                    statusDone("<b>" + _("Plugin requires Jetty version {0} or lower", maxVersion) + "</b>");
+                    statusDone("<b>" + _t("Plugin requires Jetty version {0} or lower", maxVersion) + "</b>");
                     return;
                 }
                 // do we defer extraction and installation?
@@ -470,7 +470,7 @@ class PluginUpdateRunner extends UpdateRunner {
                     try {
                         if(!FileUtil.copy(to, (new SecureFile( new SecureFile(appDir.getCanonicalPath() +"/" + appName +"/"+ ZIP).getCanonicalPath())) , true, true)) {
                             to.delete();
-                            statusDone("<b>" + _("Cannot copy plugin to directory {0}", destDir.getAbsolutePath()) + "</b>");
+                            statusDone("<b>" + _t("Cannot copy plugin to directory {0}", destDir.getAbsolutePath()) + "</b>");
                             return;
                         }
                     } catch (Throwable t) {
@@ -480,7 +480,7 @@ class PluginUpdateRunner extends UpdateRunner {
                     }
                     // we don't need the original file anymore.
                     to.delete();
-                    statusDone("<b>" + _("Plugin will be installed on next restart.") + "</b>");
+                    statusDone("<b>" + _t("Plugin will be installed on next restart.") + "</b>");
                     return;
                 }
                 if (PluginStarter.isPluginRunning(appName, _context)) {
@@ -498,12 +498,12 @@ class PluginUpdateRunner extends UpdateRunner {
             } else {
                 if (Boolean.valueOf(props.getProperty("update-only")).booleanValue()) {
                     to.delete();
-                    statusDone("<b>" + _("Plugin is for upgrades only, but the plugin is not installed") + "</b>");
+                    statusDone("<b>" + _t("Plugin is for upgrades only, but the plugin is not installed") + "</b>");
                     return;
                 }
                 if (!destDir.mkdir()) {
                     to.delete();
-                    statusDone("<b>" + _("Cannot create plugin directory {0}", destDir.getAbsolutePath()) + "</b>");
+                    statusDone("<b>" + _t("Cannot create plugin directory {0}", destDir.getAbsolutePath()) + "</b>");
                     return;
                 }
             }
@@ -511,14 +511,14 @@ class PluginUpdateRunner extends UpdateRunner {
             // Finally, extract the zip to the plugin directory
             if (!FileUtil.extractZip(to, destDir, Log.WARN)) {
                 to.delete();
-                statusDone("<b>" + _("Failed to install plugin in {0}", destDir.getAbsolutePath()) + "</b>");
+                statusDone("<b>" + _t("Failed to install plugin in {0}", destDir.getAbsolutePath()) + "</b>");
                 return;
             }
             _updated = true;
             to.delete();
             // install != update. Changing the user's settings like this is probabbly a bad idea.
             if (Boolean.valueOf( props.getProperty("dont-start-at-install")).booleanValue()) {
-                statusDone("<b>" + _("Plugin {0} installed", appName) + "</b>");
+                statusDone("<b>" + _t("Plugin {0} installed", appName) + "</b>");
                 if(!update) {
                     Properties pluginProps = PluginStarter.pluginProperties();
                     pluginProps.setProperty(PluginStarter.PREFIX + appName + PluginStarter.ENABLED, "false");
@@ -537,16 +537,16 @@ class PluginUpdateRunner extends UpdateRunner {
                             link = "<a target=\"_blank\" href=\"" + linkURL + "\"/>" + linkName + "</a>";
                         else
                             link = appName;
-                        statusDone("<b>" + _("Plugin {0} installed and started", link) + "</b>");
+                        statusDone("<b>" + _t("Plugin {0} installed and started", link) + "</b>");
                     }
                     else
-                        statusDone("<b>" + _("Plugin {0} installed but failed to start, check logs", appName) + "</b>");
+                        statusDone("<b>" + _t("Plugin {0} installed but failed to start, check logs", appName) + "</b>");
                 } catch (Throwable e) {
-                    statusDone("<b>" + _("Plugin {0} installed but failed to start", appName) + ": " + e + "</b>");
+                    statusDone("<b>" + _t("Plugin {0} installed but failed to start", appName) + ": " + e + "</b>");
                     _log.error("Error starting plugin " + appName, e);
                 }
             } else {
-                statusDone("<b>" + _("Plugin {0} installed", appName) + "</b>");
+                statusDone("<b>" + _t("Plugin {0} installed", appName) + "</b>");
             }
         }
 
@@ -554,7 +554,7 @@ class PluginUpdateRunner extends UpdateRunner {
         public void transferFailed(String url, long bytesTransferred, long bytesRemaining, int currentAttempt) {
             File f = new File(_updateFile);
             f.delete();
-            statusDone("<b>" + _("Failed to download plugin from {0}", url) + "</b>");
+            statusDone("<b>" + _t("Failed to download plugin from {0}", url) + "</b>");
         }
 
         private void statusDone(String msg) {
diff --git a/apps/routerconsole/java/src/net/i2p/router/update/UnsignedUpdateChecker.java b/apps/routerconsole/java/src/net/i2p/router/update/UnsignedUpdateChecker.java
index 15ccc6831e..5d3a45695c 100644
--- a/apps/routerconsole/java/src/net/i2p/router/update/UnsignedUpdateChecker.java
+++ b/apps/routerconsole/java/src/net/i2p/router/update/UnsignedUpdateChecker.java
@@ -59,14 +59,14 @@ class UnsignedUpdateChecker extends UpdateRunner {
         if (proxyPort == ConfigUpdateHandler.DEFAULT_PROXY_PORT_INT &&
             proxyHost.equals(ConfigUpdateHandler.DEFAULT_PROXY_HOST) &&
             _context.portMapper().getPort(PortMapper.SVC_HTTP_PROXY) < 0) {
-            String msg = _("HTTP client proxy tunnel must be running");
+            String msg = _t("HTTP client proxy tunnel must be running");
             if (_log.shouldWarn())
                 _log.warn(msg);
             updateStatus("<b>" + msg + "</b>");
             return false;
         }
 
-        //updateStatus("<b>" + _("Checking for development build update") + "</b>");
+        //updateStatus("<b>" + _t("Checking for development build update") + "</b>");
         try {
             EepHead get = new EepHead(_context, proxyHost, proxyPort, 0, url);
             if (get.fetch()) {
diff --git a/apps/routerconsole/java/src/net/i2p/router/update/UnsignedUpdateHandler.java b/apps/routerconsole/java/src/net/i2p/router/update/UnsignedUpdateHandler.java
index 516f1e4aaa..d24974921a 100644
--- a/apps/routerconsole/java/src/net/i2p/router/update/UnsignedUpdateHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/update/UnsignedUpdateHandler.java
@@ -88,7 +88,7 @@ class UnsignedUpdateHandler implements Checker, Updater {
             return null;
         UpdateRunner update = new UnsignedUpdateRunner(_context, _mgr, updateSources);
         // set status before thread to ensure UI feedback
-        _mgr.notifyProgress(update, "<b>" + _mgr._("Updating") + "</b>");
+        _mgr.notifyProgress(update, "<b>" + _mgr._t("Updating") + "</b>");
         return update;
     }
 }
diff --git a/apps/routerconsole/java/src/net/i2p/router/update/UnsignedUpdateRunner.java b/apps/routerconsole/java/src/net/i2p/router/update/UnsignedUpdateRunner.java
index 7a9519ff61..5d2e097787 100644
--- a/apps/routerconsole/java/src/net/i2p/router/update/UnsignedUpdateRunner.java
+++ b/apps/routerconsole/java/src/net/i2p/router/update/UnsignedUpdateRunner.java
@@ -38,7 +38,7 @@ class UnsignedUpdateRunner extends UpdateRunner {
             if (proxyPort == ConfigUpdateHandler.DEFAULT_PROXY_PORT_INT &&
                 proxyHost.equals(ConfigUpdateHandler.DEFAULT_PROXY_HOST) &&
                 _context.portMapper().getPort(PortMapper.SVC_HTTP_PROXY) < 0) {
-                String msg = _("HTTP client proxy tunnel must be running");
+                String msg = _t("HTTP client proxy tunnel must be running");
                 if (_log.shouldWarn())
                     _log.warn(msg);
                 updateStatus("<b>" + msg + "</b>");
diff --git a/apps/routerconsole/java/src/net/i2p/router/update/UpdateHandler.java b/apps/routerconsole/java/src/net/i2p/router/update/UpdateHandler.java
index 05f476a0ee..fc173c70b9 100644
--- a/apps/routerconsole/java/src/net/i2p/router/update/UpdateHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/update/UpdateHandler.java
@@ -49,7 +49,7 @@ class UpdateHandler implements Updater {
             return null;
         UpdateRunner update = new UpdateRunner(_context, _mgr, type, method, updateSources);
         // set status before thread to ensure UI feedback
-        _mgr.notifyProgress(update, "<b>" + _mgr._("Updating") + "</b>");
+        _mgr.notifyProgress(update, "<b>" + _mgr._t("Updating") + "</b>");
         return update;
     }
 }
diff --git a/apps/routerconsole/java/src/net/i2p/router/update/UpdateRunner.java b/apps/routerconsole/java/src/net/i2p/router/update/UpdateRunner.java
index 91e1ebf59f..a88c6f9f71 100644
--- a/apps/routerconsole/java/src/net/i2p/router/update/UpdateRunner.java
+++ b/apps/routerconsole/java/src/net/i2p/router/update/UpdateRunner.java
@@ -152,7 +152,7 @@ class UpdateRunner extends I2PAppThread implements UpdateTask, EepGet.StatusList
                 if (proxyPort == ConfigUpdateHandler.DEFAULT_PROXY_PORT_INT &&
                     proxyHost.equals(ConfigUpdateHandler.DEFAULT_PROXY_HOST) &&
                     _context.portMapper().getPort(PortMapper.SVC_HTTP_PROXY) < 0) {
-                    String msg = _("HTTP client proxy tunnel must be running");
+                    String msg = _t("HTTP client proxy tunnel must be running");
                     if (_log.shouldWarn())
                         _log.warn(msg);
                     updateStatus("<b>" + msg + "</b>");
@@ -199,7 +199,7 @@ class UpdateRunner extends I2PAppThread implements UpdateTask, EepGet.StatusList
                 continue;
             }
 
-            updateStatus("<b>" + _("Updating from {0}", linkify(updateURL)) + "</b>");
+            updateStatus("<b>" + _t("Updating from {0}", linkify(updateURL)) + "</b>");
             if (_log.shouldLog(Log.DEBUG))
                 _log.debug("Selected update URL: " + updateURL);
 
@@ -259,7 +259,7 @@ class UpdateRunner extends I2PAppThread implements UpdateTask, EepGet.StatusList
         if (_isPartial)
             return;
         long d = currentWrite + bytesTransferred;
-        String status = "<b>" + _("Updating") + "</b>";
+        String status = "<b>" + _t("Updating") + "</b>";
         _mgr.notifyProgress(this, status, d, d + bytesRemaining);
     }
 
@@ -272,7 +272,7 @@ class UpdateRunner extends I2PAppThread implements UpdateTask, EepGet.StatusList
             if (newer) {
                 _newVersion = newVersion;
             } else {
-                updateStatus("<b>" + _("No new version found at {0}", linkify(url)) + "</b>");
+                updateStatus("<b>" + _t("No new version found at {0}", linkify(url)) + "</b>");
                 if (_log.shouldLog(Log.WARN))
                     _log.warn("Found old version \"" + newVersion + "\" at " + url);
             }
@@ -295,7 +295,7 @@ class UpdateRunner extends I2PAppThread implements UpdateTask, EepGet.StatusList
         if (_log.shouldLog(Log.WARN))
             _log.warn("Update from " + url + " did not download completely (" +
                            bytesRemaining + " remaining after " + currentAttempt + " tries)");
-        updateStatus("<b>" + _("Transfer failed from {0}", linkify(url)) + "</b>");
+        updateStatus("<b>" + _t("Transfer failed from {0}", linkify(url)) + "</b>");
         _mgr.notifyAttemptFailed(this, url, null);
         // update() will call notifyTaskFailed() after last URL
     }
@@ -313,15 +313,15 @@ class UpdateRunner extends I2PAppThread implements UpdateTask, EepGet.StatusList
     }
 
     /** translate a string */
-    protected String _(String s) {
-        return _mgr._(s);
+    protected String _t(String s) {
+        return _mgr._t(s);
     }
 
     /**
      *  translate a string with a parameter
      */
-    protected String _(String s, Object o) {
-        return _mgr._(s, o);
+    protected String _t(String s, Object o) {
+        return _mgr._t(s, o);
     }
 
     @Override
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/BanlistRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/BanlistRenderer.java
index d59c32fe4e..432da4d67c 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/BanlistRenderer.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/BanlistRenderer.java
@@ -45,7 +45,7 @@ public class BanlistRenderer {
         
         entries.putAll(_context.banlist().getEntries());
         if (entries.isEmpty()) {
-            buf.append("<i>").append(_("none")).append("</i>");
+            buf.append("<i>").append(_t("none")).append("</i>");
             out.write(buf.toString());
             return;
         }
@@ -62,24 +62,24 @@ public class BanlistRenderer {
             buf.append(' ');
             String expireString = DataHelper.formatDuration2(expires);
             if (key.equals(Hash.FAKE_HASH))
-                buf.append(_("Permanently banned"));
+                buf.append(_t("Permanently banned"));
             else if (expires < 5l*24*60*60*1000)
-                buf.append(_("Temporary ban expiring in {0}", expireString));
+                buf.append(_t("Temporary ban expiring in {0}", expireString));
             else
-                buf.append(_("Banned until restart or in {0}", expireString));
+                buf.append(_t("Banned until restart or in {0}", expireString));
             Set<String> transports = entry.transports;
             if ( (transports != null) && (!transports.isEmpty()) )
                 buf.append(" on the following transport: ").append(transports);
             if (entry.cause != null) {
                 buf.append("<br>\n");
                 if (entry.causeCode != null)
-                    buf.append(_(entry.cause, entry.causeCode));
+                    buf.append(_t(entry.cause, entry.causeCode));
                 else
-                    buf.append(_(entry.cause));
+                    buf.append(_t(entry.cause));
             }
             if (!key.equals(Hash.FAKE_HASH)) {
                 buf.append(" (<a href=\"configpeer?peer=").append(key.toBase64())
-                   .append("#unsh\">").append(_("unban now")).append("</a>)");
+                   .append("#unsh\">").append(_t("unban now")).append("</a>)");
             }
             buf.append("</li>\n");
         }
@@ -89,23 +89,23 @@ public class BanlistRenderer {
     }
 
     /** translate a string */
-    private String _(String s) {
+    private String _t(String s) {
         return Messages.getString(s, _context);
     }
 
     /**
      *  translate a string with a parameter
-     *  This is a lot more expensive than _(s), so use sparingly.
+     *  This is a lot more expensive than _t(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"))
+     *    To tranlslate parameter also, use _t("foo {0} bar", _t("baz"))
      *    Do not double the single quotes in the parameter.
      *    Use autoboxing to call with ints, longs, floats, etc.
      */
-    private String _(String s, Object o) {
+    private String _t(String s, Object o) {
         return Messages.getString(s, o, _context);
     }
 }
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/CSSHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/CSSHelper.java
index e5a548cf1c..7870363b57 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/CSSHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/CSSHelper.java
@@ -146,9 +146,9 @@ public class CSSHelper extends HelperBase {
     public String title(String s) {
          StringBuilder buf = new StringBuilder(128);
          buf.append("<title>")
-            .append(_("I2P Router Console"))
+            .append(_t("I2P Router Console"))
             .append(" - ")
-            .append(_(s))
+            .append(_t(s))
             .append("</title>");
          return buf.toString();
     }
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigAdvancedHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigAdvancedHandler.java
index 88735e2862..c098ee1476 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigAdvancedHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigAdvancedHandler.java
@@ -59,7 +59,7 @@ public class ConfigAdvancedHandler extends FormHandler {
             } catch (IOException ioe) {
                 _log.error("Config error", ioe);
                 addFormError(ioe.toString());
-                addFormError(_("Error updating the configuration - please see the error logs"));
+                addFormError(_t("Error updating the configuration - please see the error logs"));
                 return;
             }
 
@@ -69,9 +69,9 @@ public class ConfigAdvancedHandler extends FormHandler {
 
             boolean saved = _context.router().saveConfig(props, unsetKeys);
             if (saved) 
-                addFormNotice(_("Configuration saved successfully"));
+                addFormNotice(_t("Configuration saved successfully"));
             else
-                addFormError(_("Error saving the configuration (applied but not saved) - please see the error logs"));
+                addFormError(_t("Error saving the configuration (applied but not saved) - please see the error logs"));
             
             //if (_forceRestart) {
             //    addFormNotice("Performing a soft restart");
@@ -93,8 +93,8 @@ public class ConfigAdvancedHandler extends FormHandler {
                 _context.router().rebuildRouterInfo();
         }
         if (saved) 
-            addFormNotice(_("Configuration saved successfully"));
+            addFormNotice(_t("Configuration saved successfully"));
         else
-            addFormError(_("Error saving the configuration (applied but not saved) - please see the error logs"));
+            addFormError(_t("Error saving the configuration (applied but not saved) - please see the error logs"));
     }
 }
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHandler.java
index 72cd5dc8ad..13b0800018 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHandler.java
@@ -45,27 +45,27 @@ public class ConfigClientsHandler extends FormHandler {
                 _action = "Save Client Configuration";
         }
 
-        if (_action.equals(_("Save Client Configuration"))) {
+        if (_action.equals(_t("Save Client Configuration"))) {
             saveClientChanges();
             return;
         }
-        if (_action.equals(_("Save Interface Configuration"))) {
+        if (_action.equals(_t("Save Interface Configuration"))) {
             saveInterfaceChanges();
             return;
         }
-        if (_action.equals(_("Save WebApp Configuration"))) {
+        if (_action.equals(_t("Save WebApp Configuration"))) {
             saveWebAppChanges();
             return;
         }
         boolean pluginsEnabled = PluginStarter.pluginsEnabled(_context);
-        if (_action.equals(_("Save Plugin Configuration"))) {
+        if (_action.equals(_t("Save Plugin Configuration"))) {
             if (pluginsEnabled)
                 savePluginChanges();
             else
                 addFormError("Plugins disabled");
             return;
         }
-        if (_action.equals(_("Install Plugin"))) {
+        if (_action.equals(_t("Install Plugin"))) {
             if (pluginsEnabled &&
                 (_context.getBooleanPropertyDefaultTrue(ConfigClientsHelper.PROP_ENABLE_PLUGIN_INSTALL) ||
                  isAdvanced()))
@@ -74,7 +74,7 @@ public class ConfigClientsHandler extends FormHandler {
                 addFormError("Plugins disabled");
             return;
         }
-        if (_action.equals(_("Install Plugin from File"))) {
+        if (_action.equals(_t("Install Plugin from File"))) {
             if (pluginsEnabled &&
                 (_context.getBooleanPropertyDefaultTrue(ConfigClientsHelper.PROP_ENABLE_PLUGIN_INSTALL) ||
                  isAdvanced()))
@@ -83,7 +83,7 @@ public class ConfigClientsHandler extends FormHandler {
                 addFormError("Plugins disabled");
             return;
         }
-        if (_action.equals(_("Update All Installed Plugins"))) {
+        if (_action.equals(_t("Update All Installed Plugins"))) {
             if (pluginsEnabled)
                 updateAllPlugins();
             else
@@ -135,14 +135,14 @@ public class ConfigClientsHandler extends FormHandler {
                     // I tried to check to see if the plugin was ran elsewhere,
                     // and it sait it was when it was not. -- Sponge
                 } catch (Throwable e) {
-                    addFormError(_("Error stopping plugin {0}", app) + ": " + e);
+                    addFormError(_t("Error stopping plugin {0}", app) + ": " + e);
                     _log.error("Error stopping plugin " + app,  e);
                 }
                 try {
                     PluginStarter.deletePlugin(_context, app);
-                    addFormNotice(_("Deleted plugin {0}", app));
+                    addFormNotice(_t("Deleted plugin {0}", app));
                 } catch (Throwable e) {
-                    addFormError(_("Error deleting plugin {0}", app) + ": " + e);
+                    addFormError(_t("Error deleting plugin {0}", app) + ": " + e);
                     _log.error("Error deleting plugin " + app,  e);
                 }
             } else {
@@ -167,17 +167,17 @@ public class ConfigClientsHandler extends FormHandler {
                     try {
                         if (pluginsEnabled) {
                             PluginStarter.stopPlugin(_context, app);
-                            addFormNotice(_("Stopped plugin {0}", app));
+                            addFormNotice(_t("Stopped plugin {0}", app));
                         } else {
                             addFormError("Plugins disabled");
                         }
                     } catch (Throwable e) {
-                        addFormError(_("Error stopping plugin {0}", app) + ": " + e);
+                        addFormError(_t("Error stopping plugin {0}", app) + ": " + e);
                         _log.error("Error stopping plugin " + app,  e);
                     }
                 } else {
                     WebAppStarter.stopWebApp(app);
-                    addFormNotice(_("Stopped webapp {0}", app));
+                    addFormNotice(_t("Stopped webapp {0}", app));
                 }
             }
             return;
@@ -206,7 +206,7 @@ public class ConfigClientsHandler extends FormHandler {
         }
 
         // label (IE)
-        String xStart = _("Start");
+        String xStart = _t("Start");
         if (_action.toLowerCase(Locale.US).startsWith(xStart + "<span class=hide> ") &&
                    _action.toLowerCase(Locale.US).endsWith("</span>")) {
             // IE sucks
@@ -229,7 +229,7 @@ public class ConfigClientsHandler extends FormHandler {
                 }
             }
         } else {
-            //addFormError(_("Unsupported") + ' ' + _action + '.');
+            //addFormError(_t("Unsupported") + ' ' + _action + '.');
         }
 
     }
@@ -279,13 +279,13 @@ public class ConfigClientsHandler extends FormHandler {
                 ClientAppConfig ca = new ClientAppConfig(clss, name, args, 2*60*1000,
                                                          _settings.get(newClient + ".enabled") != null);
                 clients.add(ca);
-                addFormNotice(_("New client added") + ": " + name + " (" + clss + ").");
+                addFormNotice(_t("New client added") + ": " + name + " (" + clss + ").");
             }
         }
 
         ClientAppConfig.writeClientAppConfig(_context, clients);
-        addFormNotice(_("Client configuration saved successfully"));
-        //addFormNotice(_("Restart required to take effect"));
+        addFormNotice(_t("Client configuration saved successfully"));
+        //addFormNotice(_t("Restart required to take effect"));
     }
 
     /**
@@ -294,7 +294,7 @@ public class ConfigClientsHandler extends FormHandler {
     private void stopClient(int i) {
         List<ClientAppConfig> clients = ClientAppConfig.getClientApps(_context);
         if (i >= clients.size()) {
-            addFormError(_("Bad client index."));
+            addFormError(_t("Bad client index."));
             return;
         }
         ClientAppConfig ca = clients.get(i);
@@ -303,7 +303,7 @@ public class ConfigClientsHandler extends FormHandler {
             try {
                 // todo parseArgs(ca.stopArgs) ?
                 clientApp.shutdown(null);
-                addFormNotice(_("Client {0} stopped", ca.clientName));
+                addFormNotice(_t("Client {0} stopped", ca.clientName));
                 // Give a chance for status to update
                 try {
                    Thread.sleep(1000);
@@ -320,12 +320,12 @@ public class ConfigClientsHandler extends FormHandler {
     private void startClient(int i) {
         List<ClientAppConfig> clients = ClientAppConfig.getClientApps(_context);
         if (i >= clients.size()) {
-            addFormError(_("Bad client index."));
+            addFormError(_t("Bad client index."));
             return;
         }
         ClientAppConfig ca = clients.get(i);
         LoadClientAppsJob.runClient(ca.className, ca.clientName, LoadClientAppsJob.parseArgs(ca.args), _context, _log);
-        addFormNotice(_("Client {0} started", ca.clientName));
+        addFormNotice(_t("Client {0} started", ca.clientName));
         // Give a chance for status to update
         try {
             Thread.sleep(1000);
@@ -335,12 +335,12 @@ public class ConfigClientsHandler extends FormHandler {
     private void deleteClient(int i) {
         List<ClientAppConfig> clients = ClientAppConfig.getClientApps(_context);
         if (i < 0 || i >= clients.size()) {
-            addFormError(_("Bad client index."));
+            addFormError(_t("Bad client index."));
             return;
         }
         ClientAppConfig ca = clients.remove(i);
         ClientAppConfig.writeClientAppConfig(_context, clients);
-        addFormNotice(_("Client {0} deleted", ca.clientName));
+        addFormNotice(_t("Client {0} deleted", ca.clientName));
     }
 
     private void saveWebAppChanges() {
@@ -355,7 +355,7 @@ public class ConfigClientsHandler extends FormHandler {
                 props.setProperty(name, "" + (val != null));
         }
         RouterConsoleRunner.storeWebAppProperties(_context, props);
-        addFormNotice(_("WebApp configuration saved."));
+        addFormNotice(_t("WebApp configuration saved."));
     }
 
     private void savePluginChanges() {
@@ -369,7 +369,7 @@ public class ConfigClientsHandler extends FormHandler {
             props.setProperty(name, "" + (val != null));
         }
         PluginStarter.storePluginProperties(props);
-        addFormNotice(_("Plugin configuration saved."));
+        addFormNotice(_t("Plugin configuration saved."));
     }
 
     /**
@@ -384,20 +384,20 @@ public class ConfigClientsHandler extends FormHandler {
                         File path = new File(_context.getBaseDir(), "webapps");
                         path = new File(path, app + ".war");
                         WebAppStarter.startWebApp(_context, s, app, path.getAbsolutePath());
-                        addFormNoticeNoEscape(_("WebApp") + " <a href=\"/" + app + "/\">" + _(app) + "</a> " + _("started") + '.');
+                        addFormNoticeNoEscape(_t("WebApp") + " <a href=\"/" + app + "/\">" + _t(app) + "</a> " + _t("started") + '.');
                     } catch (Throwable e) {
-                        addFormError(_("Failed to start") + ' ' + _(app) + " " + e + '.');
+                        addFormError(_t("Failed to start") + ' ' + _t(app) + " " + e + '.');
                         _log.error("Failed to start webapp " + app, e);
                     }
                     return;
         }
-        addFormError(_("Failed to find server."));
+        addFormError(_t("Failed to find server."));
     }
 
     private void installPlugin() {
         String url = getJettyString("pluginURL");
         if (url == null || url.length() <= 0) {
-            addFormError(_("No plugin URL specified."));
+            addFormError(_t("No plugin URL specified."));
             return;
         }
         installPlugin(null, url);
@@ -418,7 +418,7 @@ public class ConfigClientsHandler extends FormHandler {
         try {
             // non-null but zero bytes if no file entered, don't know why
             if (in == null || in.available() <= 0) {
-                addFormError(_("You must enter a file"));
+                addFormError(_t("You must enter a file"));
                 return;
             }
             DataHelper.read(in, magic);
@@ -461,7 +461,7 @@ public class ConfigClientsHandler extends FormHandler {
              if (status != null && status.length() > 0)
                  addFormNoticeNoEscape(status);
         } catch (IOException ioe) {
-            addFormError(_("Install from file failed") + " - " + ioe.getMessage());
+            addFormError(_t("Install from file failed") + " - " + ioe.getMessage());
         } finally {
             // it's really a ByteArrayInputStream but we'll play along...
             if (in != null)
@@ -476,7 +476,7 @@ public class ConfigClientsHandler extends FormHandler {
         if (url == null)
             url = props.getProperty("updateURL");
         if (url == null) {
-            addFormError(_("No update URL specified for {0}",app));
+            addFormError(_t("No update URL specified for {0}",app));
             return;
         }
         installPlugin(app, url);
@@ -485,12 +485,12 @@ public class ConfigClientsHandler extends FormHandler {
     /** @since 0.8.13 */
     private void updateAllPlugins() {
         if (NewsHelper.isAnyUpdateInProgress()) {
-            addFormError(_("Plugin or update download already in progress."));
+            addFormError(_t("Plugin or update download already in progress."));
             return;
         }
         if (!verifyProxy())
             return;
-        addFormNotice(_("Updating all plugins"));
+        addFormNotice(_t("Updating all plugins"));
         PluginStarter.updateAll(_context);
         // So that update() will post a status to the summary bar before we reload
         try {
@@ -509,14 +509,14 @@ public class ConfigClientsHandler extends FormHandler {
             return;
         }
         if (mgr.isUpdateInProgress()) {
-            addFormError(_("Plugin or update download already in progress."));
+            addFormError(_t("Plugin or update download already in progress."));
             return;
         }
         URI uri;
         try {
             uri = new URI(url);
         } catch (URISyntaxException use) {
-            addFormError(_("Bad URL {0}", url));
+            addFormError(_t("Bad URL {0}", url));
             return;
         }
         if (!url.startsWith("file:")) {
@@ -525,9 +525,9 @@ public class ConfigClientsHandler extends FormHandler {
         }
         if (mgr.installPlugin(app, uri)) {
             if (url.startsWith("file:"))
-                addFormNotice(_("Installing plugin from {0}", uri.getPath()));
+                addFormNotice(_t("Installing plugin from {0}", uri.getPath()));
             else
-                addFormNotice(_("Downloading plugin from {0}", url));
+                addFormNotice(_t("Downloading plugin from {0}", url));
         } else {
             addFormError("Cannot install, check logs");
         }
@@ -546,7 +546,7 @@ public class ConfigClientsHandler extends FormHandler {
         if (!verifyProxy())
             return;
         mgr.check(PLUGIN, app);
-        addFormNotice(_("Checking plugin {0} for updates", app));
+        addFormNotice(_t("Checking plugin {0} for updates", app));
         // So that update() will post a status to the summary bar before we reload
         try {
            Thread.sleep(1000);
@@ -570,16 +570,16 @@ public class ConfigClientsHandler extends FormHandler {
              proxyHost.equals(ConfigUpdateHandler.DEFAULT_PROXY_HOST) &&
              _context.portMapper().getPort(PortMapper.SVC_HTTP_PROXY) < 0);
         if (!rv)
-            addFormError(_("HTTP client proxy tunnel must be running"));
+            addFormError(_t("HTTP client proxy tunnel must be running"));
         return rv;
     }
 
     private void startPlugin(String app) {
         try {
             PluginStarter.startPlugin(_context, app);
-            addFormNotice(_("Started plugin {0}", app));
+            addFormNotice(_t("Started plugin {0}", app));
         } catch (Throwable e) {
-            addFormError(_("Error starting plugin {0}", app) + ": " + e);
+            addFormError(_t("Error starting plugin {0}", app) + ": " + e);
             _log.error("Error starting plugin " + app,  e);
         }
     }
@@ -601,7 +601,7 @@ public class ConfigClientsHandler extends FormHandler {
         if (user != null && pw != null && user.length() > 0 && pw.length() > 0) {
             ConsolePasswordManager mgr = new ConsolePasswordManager(_context);
             mgr.saveHash(ConfigClientsHelper.PROP_AUTH, user, pw);
-            addFormNotice(_("Added user {0}", user));
+            addFormNotice(_t("Added user {0}", user));
         }
         String mode = getJettyString("mode");
         boolean disabled = "0".equals(mode);
@@ -616,9 +616,9 @@ public class ConfigClientsHandler extends FormHandler {
                       "::".equals(intfc);
         changes.put(ConfigClientsHelper.BIND_ALL_INTERFACES, Boolean.toString(all));
         if (_context.router().saveConfig(changes, null)) {
-            addFormNotice(_("Interface configuration saved"));
-            addFormNotice(_("Restart required to take effect"));
+            addFormNotice(_t("Interface configuration saved"));
+            addFormNotice(_t("Restart required to take effect"));
         } else
-            addFormError(_("Error saving the configuration (applied but not saved) - please see the error logs"));
+            addFormError(_t("Error saving the configuration (applied but not saved) - please see the error logs"));
     }
 }
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHelper.java
index 75975c8644..c0e4df1582 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHelper.java
@@ -95,7 +95,7 @@ public class ConfigClientsHelper extends HelperBase {
     public void setEdit(String edit) {
          if (edit == null)
              return;
-        String xStart = _("Edit");
+        String xStart = _t("Edit");
         if (edit.startsWith(xStart + "<span class=hide> ") &&
             edit.endsWith("</span>")) {
             // IE sucks
@@ -104,7 +104,7 @@ public class ConfigClientsHelper extends HelperBase {
             _edit = edit.substring(5);
         } else if (edit.startsWith(xStart + ' ')) {
             _edit = edit.substring(xStart.length() + 1);
-        } else if ((_("Add Client")).equals(edit)) {
+        } else if ((_t("Add Client")).equals(edit)) {
             _edit = "new";
         }
     }
@@ -113,10 +113,10 @@ public class ConfigClientsHelper extends HelperBase {
     public String getForm1() {
         StringBuilder buf = new StringBuilder(1024);
         buf.append("<table>\n" +
-                   "<tr><th align=\"right\">").append(_("Client")).append("</th><th>")
-           .append(_("Run at Startup?")).append("</th><th>")
-           .append(_("Control")).append("</th><th align=\"left\">")
-           .append(_("Class and arguments")).append("</th></tr>\n");
+                   "<tr><th align=\"right\">").append(_t("Client")).append("</th><th>")
+           .append(_t("Run at Startup?")).append("</th><th>")
+           .append(_t("Control")).append("</th><th align=\"left\">")
+           .append(_t("Class and arguments")).append("</th></tr>\n");
         
         boolean allowEdit = isClientChangeEnabled();
         List<ClientAppConfig> clients = ClientAppConfig.getClientApps(_context);
@@ -125,7 +125,7 @@ public class ConfigClientsHelper extends HelperBase {
             ClientAppConfig ca = clients.get(cur);
             String xname = ca.clientName;
             if (xname.length() > 0)
-                xname = _(xname);
+                xname = _t(xname);
             cacs.add(new CAC(cur, ca, xname));
         }
         Collections.sort(cacs, new CACComparator());
@@ -199,10 +199,10 @@ public class ConfigClientsHelper extends HelperBase {
     public String getForm2() {
         StringBuilder buf = new StringBuilder(1024);
         buf.append("<table>\n" +
-                   "<tr><th align=\"right\">").append(_("WebApp")).append("</th><th>")
-           .append(_("Run at Startup?")).append("</th><th>")
-           .append(_("Control")).append("</th><th align=\"left\">")
-           .append(_("Description")).append("</th></tr>\n");
+                   "<tr><th align=\"right\">").append(_t("WebApp")).append("</th><th>")
+           .append(_t("Run at Startup?")).append("</th><th>")
+           .append(_t("Control")).append("</th><th align=\"left\">")
+           .append(_t("Description")).append("</th></tr>\n");
         Properties props = RouterConsoleRunner.webAppProperties(_context);
         Set<String> keys = new TreeSet<String>(props.stringPropertyNames());
         for (String name : keys) {
@@ -228,10 +228,10 @@ public class ConfigClientsHelper extends HelperBase {
     public String getForm3() {
         StringBuilder buf = new StringBuilder(1024);
         buf.append("<table>\n" +
-                   "<tr><th align=\"right\">").append(_("Plugin")).append("</th><th>")
-           .append(_("Run at Startup?")).append("</th><th>")
-           .append(_("Control")).append("</th><th align=\"left\">")
-           .append(_("Description")).append("</th></tr>\n");
+                   "<tr><th align=\"right\">").append(_t("Plugin")).append("</th><th>")
+           .append(_t("Run at Startup?")).append("</th><th>")
+           .append(_t("Control")).append("</th><th align=\"left\">")
+           .append(_t("Description")).append("</th></tr>\n");
         Properties props = PluginStarter.pluginProperties();
         Set<String> keys = new TreeSet<String>(props.stringPropertyNames());
         for (String name : keys) {
@@ -245,9 +245,9 @@ public class ConfigClientsHelper extends HelperBase {
                     continue;
                 StringBuilder desc = new StringBuilder(256);
                 desc.append("<table border=\"0\">")
-                    .append("<tr><td><b>").append(_("Version")).append("</b></td><td>").append(stripHTML(appProps, "version"))
+                    .append("<tr><td><b>").append(_t("Version")).append("</b></td><td>").append(stripHTML(appProps, "version"))
                     .append("<tr><td><b>")
-                    .append(_("Signed by")).append("</b></td><td>");
+                    .append(_t("Signed by")).append("</b></td><td>");
                 String s = stripHTML(appProps, "signer");
                 if (s != null) {
                     if (s.indexOf("@") > 0)
@@ -264,13 +264,13 @@ public class ConfigClientsHelper extends HelperBase {
                     if (ms > 0) {
                         String date = (new SimpleDateFormat("yyyy-MM-dd HH:mm")).format(new Date(ms));
                         desc.append("<tr><td><b>")
-                            .append(_("Date")).append("</b></td><td>").append(date);
+                            .append(_t("Date")).append("</b></td><td>").append(date);
                     }
                 }
                 s = stripHTML(appProps, "author");
                 if (s != null) {
                     desc.append("<tr><td><b>")
-                        .append(_("Author")).append("</b></td><td>");
+                        .append(_t("Author")).append("</b></td><td>");
                     if (s.indexOf("@") > 0)
                         desc.append("<a href=\"mailto:").append(s).append("\">").append(s).append("</a>");
                     else
@@ -281,24 +281,24 @@ public class ConfigClientsHelper extends HelperBase {
                     s = stripHTML(appProps, "description");
                 if (s != null) {
                     desc.append("<tr><td><b>")
-                        .append(_("Description")).append("</b></td><td>").append(s);
+                        .append(_t("Description")).append("</b></td><td>").append(s);
                 }
                 s = stripHTML(appProps, "license");
                 if (s != null) {
                     desc.append("<tr><td><b>")
-                        .append(_("License")).append("</b></td><td>").append(s);
+                        .append(_t("License")).append("</b></td><td>").append(s);
                 }
                 s = stripHTML(appProps, "websiteURL");
                 if (s != null) {
                     desc.append("<tr><td>")
-                        .append("<a href=\"").append(s).append("\">").append(_("Website")).append("</a><td>&nbsp;");
+                        .append("<a href=\"").append(s).append("\">").append(_t("Website")).append("</a><td>&nbsp;");
                 }
                 String updateURL = stripHTML(appProps, "updateURL.su3");
                 if (updateURL == null)
                     updateURL = stripHTML(appProps, "updateURL");
                 if (updateURL != null) {
                     desc.append("<tr><td>")
-                        .append("<a href=\"").append(updateURL).append("\">").append(_("Update link")).append("</a><td>&nbsp;");
+                        .append("<a href=\"").append(updateURL).append("\">").append(_t("Update link")).append("</a><td>&nbsp;");
                 }
                 desc.append("</table>");
                 boolean isRunning = PluginStarter.isPluginRunning(app, _context);
@@ -328,15 +328,15 @@ public class ConfigClientsHelper extends HelperBase {
             String link = "/";
             if (! RouterConsoleRunner.ROUTERCONSOLE.equals(name))
                 link += name + "/";
-            buf.append("<a href=\"").append(link).append("\">").append(_(name)).append("</a>");
+            buf.append("<a href=\"").append(link).append("\">").append(_t(name)).append("</a>");
         } else if (edit && !ro) {
             buf.append("<input type=\"text\" name=\"name").append(index).append("\" value=\"");
             if (name.length() > 0)
-                buf.append(_(name));
+                buf.append(_t(name));
             buf.append("\" >");
         } else {
             if (name.length() > 0)
-                buf.append(_(name));
+                buf.append(_t(name));
         }
         buf.append("</td><td align=\"center\" width=\"10%\"><input type=\"checkbox\" class=\"optbox\" name=\"").append(index).append(".enabled\" value=\"true\" ");
         if (enabled) {
@@ -349,26 +349,26 @@ public class ConfigClientsHelper extends HelperBase {
         // remove if you wnat to put them back
         if (showStartButton && (!ro) && !edit) {
             buf.append("<button type=\"submit\" class=\"Xaccept\" name=\"action\" value=\"Start ").append(index).append("\" >")
-               .append(_("Start")).append("<span class=hide> ").append(index).append("</span></button>");
+               .append(_t("Start")).append("<span class=hide> ").append(index).append("</span></button>");
         }
         if (showStopButton && (!edit))
             buf.append("<button type=\"submit\" class=\"Xstop\" name=\"action\" value=\"Stop ").append(index).append("\" >")
-               .append(_("Stop")).append("<span class=hide> ").append(index).append("</span></button>");
+               .append(_t("Stop")).append("<span class=hide> ").append(index).append("</span></button>");
         if (isClientChangeEnabled() && showEditButton && (!edit) && !ro)
             buf.append("<button type=\"submit\" class=\"Xadd\" name=\"edit\" value=\"Edit ").append(index).append("\" >")
-               .append(_("Edit")).append("<span class=hide> ").append(index).append("</span></button>");
+               .append(_t("Edit")).append("<span class=hide> ").append(index).append("</span></button>");
         if (showUpdateButton && (!edit) && !ro) {
             buf.append("<button type=\"submit\" class=\"Xcheck\" name=\"action\" value=\"Check ").append(index).append("\" >")
-               .append(_("Check for updates")).append("<span class=hide> ").append(index).append("</span></button>");
+               .append(_t("Check for updates")).append("<span class=hide> ").append(index).append("</span></button>");
             buf.append("<button type=\"submit\" class=\"Xdownload\" name=\"action\" value=\"Update ").append(index).append("\" >")
-                .append(_("Update")).append("<span class=hide> ").append(index).append("</span></button>");
+                .append(_t("Update")).append("<span class=hide> ").append(index).append("</span></button>");
         }
         if (showDeleteButton && (!edit) && !ro) {
             buf.append("<button type=\"submit\" class=\"Xdelete\" name=\"action\" value=\"Delete ").append(index)
                .append("\" onclick=\"if (!confirm('")
-               .append(_("Are you sure you want to delete {0}?", _(name)))
+               .append(_t("Are you sure you want to delete {0}?", _t(name)))
                .append("')) { return false; }\">")
-               .append(_("Delete")).append("<span class=hide> ").append(index).append("</span></button>");
+               .append(_t("Delete")).append("<span class=hide> ").append(index).append("</span></button>");
         }
         buf.append("</td><td align=\"left\" width=\"50%\">");
         if (edit && !ro) {
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigHomeHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigHomeHandler.java
index 5e426988e7..f26b182a0c 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigHomeHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigHomeHandler.java
@@ -18,15 +18,15 @@ public class ConfigHomeHandler extends FormHandler {
     protected void processForm() {
         if (_action == null) return;
         String group = getJettyString("group");
-        boolean deleting = _action.equals(_("Delete selected"));
-        boolean adding = _action.equals(_("Add item"));
-        boolean restoring = _action.equals(_("Restore defaults"));
-        if (_action.equals(_("Save")) && "0".equals(group)) {
+        boolean deleting = _action.equals(_t("Delete selected"));
+        boolean adding = _action.equals(_t("Add item"));
+        boolean restoring = _action.equals(_t("Restore defaults"));
+        if (_action.equals(_t("Save")) && "0".equals(group)) {
             boolean old = _context.getBooleanProperty(HomeHelper.PROP_OLDHOME);
             boolean nnew = getJettyString("oldHome") != null;
             if (old != nnew) {
                 _context.router().saveConfig(HomeHelper.PROP_OLDHOME, "" + nnew);
-                addFormNotice(_("Home page changed"));
+                addFormNotice(_t("Home page changed"));
             }
         } else if (adding || deleting || restoring) {
             String prop;
@@ -48,7 +48,7 @@ public class ConfigHomeHandler extends FormHandler {
                 //_context.router().saveConfig(prop, dflt);
                 // remove config so user will see updates
                 _context.router().saveConfig(prop, null);
-                addFormNotice(_("Restored default settings"));
+                addFormNotice(_t("Restored default settings"));
                 return;
             }
             String config = _context.getProperty(prop, dflt);
@@ -60,12 +60,12 @@ public class ConfigHomeHandler extends FormHandler {
             if (adding) {
                 String name = getJettyString("nofilter_name");
                 if (name == null || name.length() <= 0) {
-                    addFormError(_("No name entered"));
+                    addFormError(_t("No name entered"));
                     return;
                 }
                 String url = getJettyString("nofilter_url");
                 if (url == null || url.length() <= 0) {
-                    addFormError(_("No URL entered"));
+                    addFormError(_t("No URL entered"));
                     return;
                 }
                 // these would get double-escaped so we can't do it this way...
@@ -81,7 +81,7 @@ public class ConfigHomeHandler extends FormHandler {
                 else
                     app = new HomeHelper.App(name, "", url, "/themes/console/images/question.png");
                 apps.add(app);
-                addFormNotice(_("Added") + ": " + app.name);
+                addFormNotice(_t("Added") + ": " + app.name);
             } else {
                 // deleting
                 Set<String> toDelete = new HashSet<String>();
@@ -98,13 +98,13 @@ public class ConfigHomeHandler extends FormHandler {
                     HomeHelper.App app = iter.next();
                     if (toDelete.contains(app.name)) {
                         iter.remove();
-                        addFormNotice(_("Removed") + ": " + app.name);
+                        addFormNotice(_t("Removed") + ": " + app.name);
                     }
                 }
             }
             HomeHelper.saveApps(_context, prop, apps, !("3".equals(group)));
         } else {
-            //addFormError(_("Unsupported"));
+            //addFormError(_t("Unsupported"));
         }
     }
 }
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigKeyringHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigKeyringHandler.java
index 97b8cb3a64..b5930895ba 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigKeyringHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigKeyringHandler.java
@@ -15,12 +15,12 @@ public class ConfigKeyringHandler extends FormHandler {
     @Override
     protected void processForm() {
         if (_action == null) return;
-        boolean adding = _action.equals(_("Add key"));
-        if (adding || _action.equals(_("Delete key"))) {
+        boolean adding = _action.equals(_t("Add key"));
+        if (adding || _action.equals(_t("Delete key"))) {
             if (_peer == null)
-                addFormError(_("You must enter a destination"));
+                addFormError(_t("You must enter a destination"));
             if (_key == null && adding)
-                addFormError(_("You must enter a key"));
+                addFormError(_t("You must enter a key"));
             if (_peer == null || (_key == null && adding))
                 return;
             Hash h = ConvertToHash.getHash(_peer);
@@ -31,22 +31,22 @@ public class ConfigKeyringHandler extends FormHandler {
                 } catch (DataFormatException dfe) {}
                 if (h != null && h.getData() != null && sk.getData() != null) {
                     _context.keyRing().put(h, sk);
-                    addFormNotice(_("Key for") + " " + h.toBase64() + " " + _("added to keyring"));
+                    addFormNotice(_t("Key for") + " " + h.toBase64() + " " + _t("added to keyring"));
                 } else {
-                    addFormError(_("Invalid destination or key"));
+                    addFormError(_t("Invalid destination or key"));
                 }
             } else {  // Delete
                 if (h != null && h.getData() != null) {
                     if (_context.keyRing().remove(h) != null)
-                        addFormNotice(_("Key for") + " " + h.toBase64() + " " + _("removed from keyring"));
+                        addFormNotice(_t("Key for") + " " + h.toBase64() + " " + _t("removed from keyring"));
                     else
-                        addFormNotice(_("Key for") + " " + h.toBase64() + " " + _("not found in keyring"));
+                        addFormNotice(_t("Key for") + " " + h.toBase64() + " " + _t("not found in keyring"));
                 } else {
-                    addFormError(_("Invalid destination"));
+                    addFormError(_t("Invalid destination"));
                 }
             }
         } else {
-            //addFormError(_("Unsupported"));
+            //addFormError(_t("Unsupported"));
         }
     }
 
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigLoggingHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigLoggingHandler.java
index e98528a965..e902e9c72f 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigLoggingHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigLoggingHandler.java
@@ -79,7 +79,7 @@ public class ConfigLoggingHandler extends FormHandler {
                     props.setProperty(_newLogClass, _newLogLevel);
                 _context.logManager().setLimits(props);
                 shouldSave = true;
-                addFormNotice(_("Log overrides updated"));
+                addFormNotice(_t("Log overrides updated"));
             } catch (IOException ioe) {
                 // shouldn't ever happen (BAIS shouldnt cause an IOE)
                 _context.logManager().getLog(ConfigLoggingHandler.class).error("Error reading from the props?", ioe);
@@ -160,7 +160,7 @@ public class ConfigLoggingHandler extends FormHandler {
             boolean saved = _context.logManager().saveConfig();
 
             if (saved) 
-                addFormNotice(_("Log configuration saved"));
+                addFormNotice(_t("Log configuration saved"));
             else
                 addFormError("Error saving the configuration (applied but not saved) - please see the error logs");
         }
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigLoggingHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigLoggingHelper.java
index aa064e627d..1a9354a2d9 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigLoggingHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigLoggingHelper.java
@@ -42,9 +42,9 @@ public class ConfigLoggingHelper extends HelperBase {
             buf.append(prefix).append('=').append(level).append('\n');
         }
         buf.append("</textarea><br>\n");
-        buf.append("<i>").append(_("Add additional logging statements above. Example: net.i2p.router.tunnel=WARN")).append("</i><br>");
-        buf.append("<i>").append(_("Or put entries in the logger.config file. Example: logger.record.net.i2p.router.tunnel=WARN")).append("</i><br>");
-        buf.append("<i>").append(_("Valid levels are DEBUG, INFO, WARN, ERROR, CRIT")).append("</i>\n");
+        buf.append("<i>").append(_t("Add additional logging statements above. Example: net.i2p.router.tunnel=WARN")).append("</i><br>");
+        buf.append("<i>").append(_t("Or put entries in the logger.config file. Example: logger.record.net.i2p.router.tunnel=WARN")).append("</i><br>");
+        buf.append("<i>").append(_t("Valid levels are DEBUG, INFO, WARN, ERROR, CRIT")).append("</i>\n");
 
       /****
         // this is too big and ugly
@@ -78,11 +78,11 @@ public class ConfigLoggingHelper extends HelperBase {
             buf.append("<option value=\"").append(l).append('\"');
             if (l.equals(cur))
                 buf.append(" selected=\"selected\"");
-            buf.append('>').append(_(l)).append("</option>\n");
+            buf.append('>').append(_t(l)).append("</option>\n");
         }        
         
         if (showRemove)
-            buf.append("<option value=\"remove\">").append(_("Remove")).append("</option>");
+            buf.append("<option value=\"remove\">").append(_t("Remove")).append("</option>");
         buf.append("</select>\n");
         return buf.toString();
     }
@@ -119,7 +119,7 @@ public class ConfigLoggingHelper extends HelperBase {
         StringBuilder buf = new StringBuilder(65536);
         buf.append("<select name=\"newlogclass\">\n" +
                    "<option value=\"\" selected=\"selected\">")
-           .append(_("Select a class to add"))
+           .append(_t("Select a class to add"))
            .append("</option>\n");
 
         for (String l : sortedLogs) {
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigNavHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigNavHelper.java
index 5282b4a890..f731f0017b 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigNavHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigNavHelper.java
@@ -62,7 +62,7 @@ public class ConfigNavHelper extends HelperBase {
             buf.append("<center>");
         List<Tab> tabs = new ArrayList<Tab>(pages.length);
         for (int i = 0; i < pages.length; i++) {
-            tabs.add(new Tab(pages[i], _(titles[i])));
+            tabs.add(new Tab(pages[i], _t(titles[i])));
         }
         Collections.sort(tabs, new TabComparator());
         for (int i = 0; i < tabs.size(); i++) {
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigNetHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigNetHandler.java
index 8465400f53..b2c4304325 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigNetHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigNetHandler.java
@@ -56,7 +56,7 @@ public class ConfigNetHandler extends FormHandler {
     
     @Override
     protected void processForm() {
-        if (_saveRequested || ( (_action != null) && (_("Save changes").equals(_action)) )) {
+        if (_saveRequested || ( (_action != null) && (_t("Save changes").equals(_action)) )) {
             saveChanges();
         //} else if (_recheckReachabilityRequested) {
         //    recheckReachability();
@@ -145,7 +145,7 @@ public class ConfigNetHandler extends FormHandler {
 /****
     private void recheckReachability() {
         _context.commSystem().recheckReachability();
-        addFormNotice(_("Rechecking router reachability..."));
+        addFormNotice(_t("Rechecking router reachability..."));
     }
 ****/
     
@@ -209,7 +209,7 @@ public class ConfigNetHandler extends FormHandler {
                 }
                 changes.put(UDPTransport.PROP_SOURCES, _udpAutoIP);
                 if ((!oldUdp.equals(_udpAutoIP)) || (!oldUHost.equals(uhost))) {
-                   addFormNotice(_("Updating IP address"));
+                   addFormNotice(_t("Updating IP address"));
                    restartRequired = true;
                 }
             }
@@ -231,7 +231,7 @@ public class ConfigNetHandler extends FormHandler {
                     ch = true;
                 }
                 if (ch)
-                    addFormNotice(_("Updating IPv6 setting"));
+                    addFormNotice(_t("Updating IPv6 setting"));
             }
 
             // NTCP Settings
@@ -248,21 +248,21 @@ public class ConfigNetHandler extends FormHandler {
             if ((!oldAutoHost.equals(_ntcpAutoIP)) || ! oldNHost.equalsIgnoreCase(_ntcpHostname)) {
                 boolean valid = true;
                 if ("disabled".equals(_ntcpAutoIP)) {
-                    addFormNotice(_("Disabling TCP completely"));
+                    addFormNotice(_t("Disabling TCP completely"));
                 } else if ("false".equals(_ntcpAutoIP) && _ntcpHostname.length() > 0) {
                     valid = verifyAddress(_ntcpHostname);
                     if (valid) {
                         changes.put(ConfigNetHelper.PROP_I2NP_NTCP_HOSTNAME, _ntcpHostname);
-                        addFormNotice(_("Updating TCP address to {0}", _ntcpHostname));
+                        addFormNotice(_t("Updating TCP address to {0}", _ntcpHostname));
                     } else {
                         error = true;
                     }
                 } else {
                     removes.add(ConfigNetHelper.PROP_I2NP_NTCP_HOSTNAME);
                     if ("false".equals(_ntcpAutoIP))
-                        addFormNotice(_("Disabling inbound TCP"));
+                        addFormNotice(_t("Disabling inbound TCP"));
                     else
-                        addFormNotice(_("Updating inbound TCP address to auto")); // true or always
+                        addFormNotice(_t("Updating inbound TCP address to auto")); // true or always
                 }
                 if (valid) {
                     changes.put(ConfigNetHelper.PROP_I2NP_NTCP_AUTO_IP, _ntcpAutoIP);
@@ -275,18 +275,18 @@ public class ConfigNetHandler extends FormHandler {
                     int port = Addresses.getPort(_ntcpPort);
                     if (port != 0) {
                         changes.put(ConfigNetHelper.PROP_I2NP_NTCP_PORT, _ntcpPort);
-                        addFormNotice(_("Updating TCP port to {0}", _ntcpPort));
+                        addFormNotice(_t("Updating TCP port to {0}", _ntcpPort));
                         if (port < 1024) {
-                            addFormError(_("Warning - ports less than 1024 are not recommended"));
+                            addFormError(_t("Warning - ports less than 1024 are not recommended"));
                             error = true;
                         }
                     } else {
-                        addFormError(_("Invalid port") + ": " + _ntcpPort);
+                        addFormError(_t("Invalid port") + ": " + _ntcpPort);
                         error = true;
                     }
                 } else {
                     removes.add(ConfigNetHelper.PROP_I2NP_NTCP_PORT);
-                    addFormNotice(_("Updating inbound TCP port to auto"));
+                    addFormNotice(_t("Updating inbound TCP port to auto"));
                 }
                 changes.put(ConfigNetHelper.PROP_I2NP_NTCP_AUTO_PORT, "" + _ntcpAutoPort);
                 restartRequired = true;
@@ -300,15 +300,15 @@ public class ConfigNetHandler extends FormHandler {
                     if (port != 0) {
                         changes.put(UDPTransport.PROP_INTERNAL_PORT, _udpPort);
                         changes.put(UDPTransport.PROP_EXTERNAL_PORT, _udpPort);
-                        addFormNotice(_("Updating UDP port to {0}", _udpPort));
+                        addFormNotice(_t("Updating UDP port to {0}", _udpPort));
                         if (port < 1024) {
-                            addFormError(_("Warning - ports less than 1024 are not recommended"));
+                            addFormError(_t("Warning - ports less than 1024 are not recommended"));
                             error = true;
                         } else {
                             restartRequired = true;
                         }
                     } else {
-                        addFormError(_("Invalid port") + ": " + _udpPort);
+                        addFormError(_t("Invalid port") + ": " + _udpPort);
                         error = true;
                     }
                 }
@@ -325,9 +325,9 @@ public class ConfigNetHandler extends FormHandler {
             if (switchRequired) {
                 changes.put(PROP_HIDDEN, "" + _hiddenMode);
                 if (_hiddenMode)
-                    addFormError(_("Gracefully restarting into Hidden Router Mode"));
+                    addFormError(_t("Gracefully restarting into Hidden Router Mode"));
                 else
-                    addFormError(_("Gracefully restarting to exit Hidden Router Mode"));
+                    addFormError(_t("Gracefully restarting to exit Hidden Router Mode"));
             }
 
             changes.put(Router.PROP_DYNAMIC_KEYS, "" + _dynamicKeys);
@@ -336,10 +336,10 @@ public class ConfigNetHandler extends FormHandler {
                 _upnp) {
                 // This is minor, don't set restartRequired
                 if (_upnp)
-                    addFormNotice(_("Enabling UPnP"));
+                    addFormNotice(_t("Enabling UPnP"));
                 else
-                    addFormNotice(_("Disabling UPnP"));
-                addFormNotice(_("Restart required to take effect"));
+                    addFormNotice(_t("Disabling UPnP"));
+                addFormNotice(_t("Restart required to take effect"));
             }
             changes.put(TransportManager.PROP_ENABLE_UPNP, "" + _upnp);
 
@@ -347,18 +347,18 @@ public class ConfigNetHandler extends FormHandler {
                 _laptop) {
                 // This is minor, don't set restartRequired
                 if (_laptop)
-                    addFormNotice(_("Enabling laptop mode"));
+                    addFormNotice(_t("Enabling laptop mode"));
                 else
-                    addFormNotice(_("Disabling laptop mode"));
+                    addFormNotice(_t("Disabling laptop mode"));
             }
             changes.put(UDPTransport.PROP_LAPTOP_MODE, "" + _laptop);
 
             if (Boolean.parseBoolean(_context.getProperty(TransportUtil.PROP_IPV4_FIREWALLED)) !=
                 _ipv4Firewalled) {
                 if (_ipv4Firewalled)
-                    addFormNotice(_("Disabling inbound IPv4"));
+                    addFormNotice(_t("Disabling inbound IPv4"));
                 else
-                    addFormNotice(_("Enabling inbound IPv4"));
+                    addFormNotice(_t("Enabling inbound IPv4"));
                 restartRequired = true;
             }
             changes.put(TransportUtil.PROP_IPV4_FIREWALLED, "" + _ipv4Firewalled);
@@ -366,16 +366,16 @@ public class ConfigNetHandler extends FormHandler {
             if (_context.getBooleanPropertyDefaultTrue(TransportManager.PROP_ENABLE_UDP) !=
                 !_udpDisabled) {
                 if (_udpDisabled)
-                    addFormNotice(_("Disabling UDP"));
+                    addFormNotice(_t("Disabling UDP"));
                 else
-                    addFormNotice(_("Enabling UDP"));
+                    addFormNotice(_t("Enabling UDP"));
                 restartRequired = true;
             }
             changes.put(TransportManager.PROP_ENABLE_UDP, "" + (!_udpDisabled));
 
             if (_requireIntroductions) {
                 changes.put(UDPTransport.PROP_FORCE_INTRODUCERS, "true");
-                addFormNotice(_("Requiring SSU introducers"));
+                addFormNotice(_t("Requiring SSU introducers"));
             } else {
                 removes.add(UDPTransport.PROP_FORCE_INTRODUCERS);
             }
@@ -386,9 +386,9 @@ public class ConfigNetHandler extends FormHandler {
         
         boolean saved = _context.router().saveConfig(changes, removes);
         if (saved) 
-            addFormNotice(_("Configuration saved successfully"));
+            addFormNotice(_t("Configuration saved successfully"));
         else
-            addFormError(_("Error saving the configuration (applied but not saved) - please see the error logs"));
+            addFormError(_t("Error saving the configuration (applied but not saved) - please see the error logs"));
 
         // this has to be after the save
         if (ratesUpdated)
@@ -416,7 +416,7 @@ public class ConfigNetHandler extends FormHandler {
               //} else {
                 // There's a few changes that don't really require restart (e.g. enabling inbound TCP)
                 // But it would be hard to get right, so just do a restart.
-                //addFormError(_("Gracefully restarting I2P to change published router address"));
+                //addFormError(_t("Gracefully restarting I2P to change published router address"));
                 //_context.router().shutdownGracefully(Router.EXIT_GRACEFUL_RESTART);
               //}
             }
@@ -433,13 +433,13 @@ public class ConfigNetHandler extends FormHandler {
             return false;
         byte[] iab = Addresses.getIP(addr);
         if (iab == null) {
-            addFormError(_("Invalid address") + ": " + addr);
+            addFormError(_t("Invalid address") + ": " + addr);
             return false;
         }
         // TODO set IPv6 arg based on configuration?
         boolean rv = TransportUtil.isPubliclyRoutable(iab, true);
         if (!rv)
-            addFormError(_("The hostname or IP {0} is not publicly routable", addr));
+            addFormError(_t("The hostname or IP {0} is not publicly routable", addr));
         return rv;
     }
 
@@ -464,7 +464,7 @@ public class ConfigNetHandler extends FormHandler {
             String old = _context.router().getConfigSetting(Router.PROP_BANDWIDTH_SHARE_PERCENTAGE);
             if ( (old == null) || (!old.equals(_sharePct)) ) {
                 changes.put(Router.PROP_BANDWIDTH_SHARE_PERCENTAGE, _sharePct);
-                addFormNotice(_("Updating bandwidth share percentage"));
+                addFormNotice(_t("Updating bandwidth share percentage"));
                 updated = true;
             }
         }
@@ -494,7 +494,7 @@ public class ConfigNetHandler extends FormHandler {
         }
 
         if (bwUpdated) {
-            addFormNotice(_("Updated bandwidth limits"));
+            addFormNotice(_t("Updated bandwidth limits"));
             updated = true;
         }
 
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigNetHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigNetHelper.java
index 3c82277943..c3abb58f54 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigNetHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigNetHelper.java
@@ -43,10 +43,10 @@ public class ConfigNetHelper extends HelperBase {
     public String getUdpIP() {
         RouterAddress addr = _context.router().getRouterInfo().getTargetAddress("SSU");
         if (addr == null)
-            return _("unknown");
+            return _t("unknown");
         String rv = addr.getHost();
         if (rv == null)
-            return _("unknown");
+            return _t("unknown");
         return rv;
     }
 
@@ -58,10 +58,10 @@ public class ConfigNetHelper extends HelperBase {
       /****
         RouterAddress addr = _context.router().getRouterInfo().getTargetAddress("SSU");
         if (addr == null)
-            return _("unknown");
+            return _t("unknown");
         UDPAddress ua = new UDPAddress(addr);
         if (ua.getPort() <= 0)
-            return _("unknown");
+            return _t("unknown");
         return "" + ua.getPort();
       ****/
         // Since we can't get to UDPTransport.getRequestedPort() from here, just use
@@ -253,8 +253,8 @@ public class ConfigNetHelper extends HelperBase {
         return kbytesToBits(getShareBandwidth());
     }
     private String kbytesToBits(int kbytes) {
-        return DataHelper.formatSize(kbytes * (8 * 1024L)) + ' ' + _("bits per second") +
-               ' ' + _("or {0} bytes per month maximum", DataHelper.formatSize(kbytes * (1024L * 60 * 60 * 24 * 31)));
+        return DataHelper.formatSize(kbytes * (8 * 1024L)) + ' ' + _t("bits per second") +
+               ' ' + _t("or {0} bytes per month maximum", DataHelper.formatSize(kbytes * (1024L * 60 * 60 * 24 * 31)));
     }
     public String getInboundBurstRate() {
         return "" + _context.bandwidthLimiter().getInboundBurstKBytesPerSecond();
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigPeerHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigPeerHandler.java
index e9af122f11..6ea3842a81 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigPeerHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigPeerHandler.java
@@ -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.equals(_("Ban peer until restart"))) {
+        } else if (_action.equals(_t("Ban peer until restart"))) {
             Hash h = getHash();
             if (h != null) {
-                _context.banlist().banlistRouterForever(h, _("Manually banned via {0}"), "<a href=\"configpeer\">configpeer</a>");
-                addFormNotice(_("Peer") + " " + _peer + " " + _("banned until restart") );
+                _context.banlist().banlistRouterForever(h, _t("Manually banned via {0}"), "<a href=\"configpeer\">configpeer</a>");
+                addFormNotice(_t("Peer") + " " + _peer + " " + _t("banned until restart") );
                 return;
             }
-            addFormError(_("Invalid peer"));
-        } else if (_action.equals(_("Unban peer"))) {
+            addFormError(_t("Invalid peer"));
+        } else if (_action.equals(_t("Unban peer"))) {
             Hash h = getHash();
             if (h != null) {
                 if (_context.banlist().isBanlisted(h)) {
                     _context.banlist().unbanlistRouter(h);
-                    addFormNotice(_("Peer") + " " + _peer + " " + _("unbanned") );
+                    addFormNotice(_t("Peer") + " " + _peer + " " + _t("unbanned") );
                 } else
-                    addFormNotice(_("Peer") + " " + _peer + " " + _("is not currently banned") );
+                    addFormNotice(_t("Peer") + " " + _peer + " " + _t("is not currently banned") );
                 return;
             }
-            addFormError(_("Invalid peer"));
-        } else if (_action.equals(_("Adjust peer bonuses"))) {
+            addFormError(_t("Invalid peer"));
+        } else if (_action.equals(_t("Adjust peer bonuses"))) {
             Hash h = getHash();
             if (h != null) {
                 PeerProfile prof = _context.profileOrganizer().getProfile(h);
@@ -44,23 +44,23 @@ public class ConfigPeerHandler extends FormHandler {
                     try {
                         prof.setSpeedBonus(Long.parseLong(_speed));
                     } catch (NumberFormatException nfe) {
-                        addFormError(_("Bad speed value"));
+                        addFormError(_t("Bad speed value"));
                     }
                     try {
                         prof.setCapacityBonus(Long.parseLong(_capacity));
                     } catch (NumberFormatException nfe) {
-                        addFormError(_("Bad capacity value"));
+                        addFormError(_t("Bad capacity value"));
                     }
                     addFormNotice("Bonuses adjusted for " + _peer);
                 } else
                     addFormError("No profile exists for " + _peer);
                 return;
             }
-            addFormError(_("Invalid peer"));
+            addFormError(_t("Invalid peer"));
         } else if (_action.startsWith("Check")) {
-            addFormError(_("Unsupported"));
+            addFormError(_t("Unsupported"));
         } else {
-            //addFormError(_("Unsupported") + ' ' + _action + '.');
+            //addFormError(_t("Unsupported") + ' ' + _action + '.');
         }
     }
     
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigReseedHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigReseedHandler.java
index ba45058f46..f7d03555e0 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigReseedHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigReseedHandler.java
@@ -21,32 +21,32 @@ public class ConfigReseedHandler extends FormHandler {
     @Override
     protected void processForm() {
 
-        if (_action.equals(_("Save changes and reseed now"))) {
+        if (_action.equals(_t("Save changes and reseed now"))) {
             saveChanges();
             if (!_context.netDb().reseedChecker().requestReseed()) {
-                addFormError(_("Reseeding is already in progress"));
+                addFormError(_t("Reseeding is already in progress"));
             } else {
                 // skip the nonce checking in ReseedHandler
-                addFormNotice(_("Starting reseed process"));
+                addFormNotice(_t("Starting reseed process"));
             }
-        } else if (_action.equals(_("Reseed from URL"))) {
+        } else if (_action.equals(_t("Reseed from URL"))) {
             String val = getJettyString("url");
             if (val != null)
                 val = val.trim();
             if (val == null || val.length() == 0) {
-                addFormError(_("You must enter a URL"));
+                addFormError(_t("You must enter a URL"));
                 return;
             }
             URL url;
             try {
                 url = new URL(val);
             } catch (MalformedURLException mue) {
-                addFormError(_("Bad URL {0}", val));
+                addFormError(_t("Bad URL {0}", val));
                 return;
             }
             try {
                 if (!_context.netDb().reseedChecker().requestReseed(url)) {
-                    addFormError(_("Reseeding is already in progress"));
+                    addFormError(_t("Reseeding is already in progress"));
                 } else {
                     // wait a while for completion but not forever
                     for (int i = 0; i < 40; i++) {
@@ -63,50 +63,50 @@ public class ConfigReseedHandler extends FormHandler {
                     } else if (status.length() > 0) {
                         addFormNoticeNoEscape(status);
                     } else if (_context.netDb().reseedChecker().inProgress()) {
-                        addFormNotice(_("Reseed in progress, check summary bar for status"));
+                        addFormNotice(_t("Reseed in progress, check summary bar for status"));
                     } else {
-                        addFormNotice(_("Reseed complete, check summary bar for status"));
+                        addFormNotice(_t("Reseed complete, check summary bar for status"));
                     }
                 }
             } catch (IllegalArgumentException iae) {
-                addFormError(_("Bad URL {0}", val) + " - " + iae.getMessage());
+                addFormError(_t("Bad URL {0}", val) + " - " + iae.getMessage());
             }
-        } else if (_action.equals(_("Reseed from file"))) {
+        } else if (_action.equals(_t("Reseed from file"))) {
             InputStream in = _requestWrapper.getInputStream("file");
             try {
                 // non-null but zero bytes if no file entered, don't know why
                 if (in == null || in.available() <= 0) {
-                    addFormError(_("You must enter a file"));
+                    addFormError(_t("You must enter a file"));
                     return;
                 }
                 int count = _context.netDb().reseedChecker().requestReseed(in);
                 if (count <= 0) {
-                    addFormError(_("Reseed from file failed"));
+                    addFormError(_t("Reseed from file failed"));
                 } else {
                     addFormNotice(ngettext("Reseed successful, loaded {0} router info from file",
                                            "Reseed successful, loaded {0} router infos from file",
                                            count));
                 }
             } catch (IOException ioe) {
-                addFormError(_("Reseed from file failed") + " - " + ioe);
+                addFormError(_t("Reseed from file failed") + " - " + ioe);
             } finally {
                 // it's really a ByteArrayInputStream but we'll play along...
                 if (in != null)
                     try { in.close(); } catch (IOException ioe) {}
             }
-        } else if (_action.equals(_("Save changes"))) {
+        } else if (_action.equals(_t("Save changes"))) {
             saveChanges();
-        } else if (_action.equals(_("Reset URL list"))) {
+        } else if (_action.equals(_t("Reset URL list"))) {
             resetUrlList();
         }
-        //addFormError(_("Unsupported") + ' ' + _action + '.');
+        //addFormError(_t("Unsupported") + ' ' + _action + '.');
     }
 
     private void resetUrlList() {
         if (_context.router().saveConfig(Reseeder.PROP_RESEED_URL, null))
-	    addFormNotice(_("URL list reset successfully"));
+	    addFormNotice(_t("URL list reset successfully"));
         else
-            addFormError(_("Error saving the configuration (applied but not saved) - please see the error logs"));
+            addFormError(_t("Error saving the configuration (applied but not saved) - please see the error logs"));
     }
 
     /** @since 0.8.9 */
@@ -155,9 +155,9 @@ public class ConfigReseedHandler extends FormHandler {
         saveBoolean(Reseeder.PROP_PROXY_ENABLE, "enable");
         saveBoolean(Reseeder.PROP_SPROXY_ENABLE, "senable");
         if (_context.router().saveConfig(changes, removes))
-            addFormNotice(_("Configuration saved successfully."));
+            addFormNotice(_t("Configuration saved successfully."));
         else
-            addFormError(_("Error saving the configuration (applied but not saved) - please see the error logs"));
+            addFormError(_t("Error saving the configuration (applied but not saved) - please see the error logs"));
     }
 
     /** translate (ngettext) @since 0.9.19 */
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigRestartBean.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigRestartBean.java
index 2b38859c1b..6e506422ce 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigRestartBean.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigRestartBean.java
@@ -31,24 +31,24 @@ public class ConfigRestartBean {
         String systemNonce = getNonce();
         if ( (nonce != null) && (systemNonce.equals(nonce)) && (action != null) ) {
             // Normal browsers send value, IE sends button label
-            if ("shutdownImmediate".equals(action) || _("Shutdown immediately", ctx).equals(action)) {
+            if ("shutdownImmediate".equals(action) || _t("Shutdown immediately", ctx).equals(action)) {
                 if (ctx.hasWrapper())
                     ConfigServiceHandler.registerWrapperNotifier(ctx, Router.EXIT_HARD, false);
                 //ctx.router().shutdown(Router.EXIT_HARD); // never returns
                 ctx.router().shutdownGracefully(Router.EXIT_HARD); // give the UI time to respond
-            } else if ("cancelShutdown".equals(action) || _("Cancel shutdown", ctx).equals(action) ||
-                       _("Cancel restart", ctx).equals(action)) {
+            } else if ("cancelShutdown".equals(action) || _t("Cancel shutdown", ctx).equals(action) ||
+                       _t("Cancel restart", ctx).equals(action)) {
                 ctx.router().cancelGracefulShutdown();
-            } else if ("restartImmediate".equals(action) || _("Restart immediately", ctx).equals(action)) {
+            } else if ("restartImmediate".equals(action) || _t("Restart immediately", ctx).equals(action)) {
                 if (ctx.hasWrapper())
                     ConfigServiceHandler.registerWrapperNotifier(ctx, Router.EXIT_HARD_RESTART, false);
                 //ctx.router().shutdown(Router.EXIT_HARD_RESTART); // never returns
                 ctx.router().shutdownGracefully(Router.EXIT_HARD_RESTART); // give the UI time to respond
-            } else if ("restart".equals(action) || _("Restart", ctx).equals(action)) {
+            } else if ("restart".equals(action) || _t("Restart", ctx).equals(action)) {
                 if (ctx.hasWrapper())
                     ConfigServiceHandler.registerWrapperNotifier(ctx, Router.EXIT_GRACEFUL_RESTART, false);
                 ctx.router().shutdownGracefully(Router.EXIT_GRACEFUL_RESTART);
-            } else if ("shutdown".equals(action) || _("Shutdown", ctx).equals(action)) {
+            } else if ("shutdown".equals(action) || _t("Shutdown", ctx).equals(action)) {
                 if (ctx.hasWrapper())
                     ConfigServiceHandler.registerWrapperNotifier(ctx, Router.EXIT_GRACEFUL, false);
                 ctx.router().shutdownGracefully();
@@ -62,13 +62,13 @@ public class ConfigRestartBean {
         if ((shuttingDown || restarting) && timeRemaining <= 5*1000) {
             buf.append("<h4>");
             if (restarting)
-                buf.append(_("Restart imminent", ctx));
+                buf.append(_t("Restart imminent", ctx));
             else
-                buf.append(_("Shutdown imminent", ctx));
+                buf.append(_t("Shutdown imminent", ctx));
             buf.append("</h4>");
         } else if (shuttingDown) {
             buf.append("<h4>");
-            buf.append(_("Shutdown in {0}", DataHelper.formatDuration2(timeRemaining), ctx));
+            buf.append(_t("Shutdown in {0}", DataHelper.formatDuration2(timeRemaining), ctx));
             int tuns = ctx.tunnelManager().getParticipatingCount();
             if (tuns > 0) {
                 buf.append("<br>").append(ngettext("Please wait for routing commitment to expire for {0} tunnel",
@@ -79,7 +79,7 @@ public class ConfigRestartBean {
             buttons(ctx, buf, urlBase, systemNonce, SET1);
         } else if (restarting) {
             buf.append("<h4>");
-            buf.append(_("Restart in {0}", DataHelper.formatDuration2(timeRemaining), ctx));
+            buf.append(_t("Restart in {0}", DataHelper.formatDuration2(timeRemaining), ctx));
             int tuns = ctx.tunnelManager().getParticipatingCount();
             if (tuns > 0) {
                 buf.append("<br>").append(ngettext("Please wait for routing commitment to expire for {0} tunnel",
@@ -105,7 +105,7 @@ public class ConfigRestartBean {
             buf.append("<button type=\"submit\" name=\"action\" value=\"")
                .append(s[i]).append("\" class=\"")
                .append(s[i+1]).append("\" >")
-               .append(_(s[i+2], ctx)).append("</button>\n");
+               .append(_t(s[i+2], ctx)).append("</button>\n");
         }
         buf.append("</form>\n");
     }
@@ -126,11 +126,11 @@ public class ConfigRestartBean {
         return Long.MAX_VALUE/2;  // summaryframe.jsp adds a safety factor so we don't want to overflow...
     }
 
-    private static String _(String s, RouterContext ctx) {
+    private static String _t(String s, RouterContext ctx) {
         return Messages.getString(s, ctx);
     }
 
-    private static String _(String s, Object o, RouterContext ctx) {
+    private static String _t(String s, Object o, RouterContext ctx) {
         return Messages.getString(s, o, ctx);
     }
 
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigServiceHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigServiceHandler.java
index 4129db1368..89a9d48eb1 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigServiceHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigServiceHandler.java
@@ -196,60 +196,60 @@ public class ConfigServiceHandler extends FormHandler {
     protected void processForm() {
         if (_action == null) return;
         
-        if (_("Shutdown gracefully").equals(_action)) {
+        if (_t("Shutdown gracefully").equals(_action)) {
             if (_context.hasWrapper())
                 registerWrapperNotifier(Router.EXIT_GRACEFUL, false);
             _context.router().shutdownGracefully();
-            addFormNotice(_("Graceful shutdown initiated"));
-        } else if (_("Shutdown immediately").equals(_action)) {
+            addFormNotice(_t("Graceful shutdown initiated"));
+        } else if (_t("Shutdown immediately").equals(_action)) {
             if (_context.hasWrapper())
                 registerWrapperNotifier(Router.EXIT_HARD, false);
             _context.router().shutdown(Router.EXIT_HARD);
-            addFormNotice(_("Shutdown immediately"));
-        } else if (_("Cancel graceful shutdown").equals(_action)) {
+            addFormNotice(_t("Shutdown immediately"));
+        } else if (_t("Cancel graceful shutdown").equals(_action)) {
             _context.router().cancelGracefulShutdown();
-            addFormNotice(_("Graceful shutdown cancelled"));
-        } else if (_("Graceful restart").equals(_action)) {
+            addFormNotice(_t("Graceful shutdown cancelled"));
+        } else if (_t("Graceful restart").equals(_action)) {
             // should have wrapper if restart button is visible
             if (_context.hasWrapper())
                 registerWrapperNotifier(Router.EXIT_GRACEFUL_RESTART, false);
             _context.router().shutdownGracefully(Router.EXIT_GRACEFUL_RESTART);
-            addFormNotice(_("Graceful restart requested"));
-        } else if (_("Hard restart").equals(_action)) {
+            addFormNotice(_t("Graceful restart requested"));
+        } else if (_t("Hard restart").equals(_action)) {
             // should have wrapper if restart button is visible
             if (_context.hasWrapper())
                 registerWrapperNotifier(Router.EXIT_HARD_RESTART, false);
             _context.router().shutdown(Router.EXIT_HARD_RESTART);
-            addFormNotice(_("Hard restart requested"));
-        } else if (_("Rekey and Restart").equals(_action)) {
-            addFormNotice(_("Rekeying after graceful restart"));
+            addFormNotice(_t("Hard restart requested"));
+        } else if (_t("Rekey and Restart").equals(_action)) {
+            addFormNotice(_t("Rekeying after graceful restart"));
             registerWrapperNotifier(Router.EXIT_GRACEFUL_RESTART, true);
             _context.router().shutdownGracefully(Router.EXIT_GRACEFUL_RESTART);
-        } else if (_("Rekey and Shutdown").equals(_action)) {
-            addFormNotice(_("Rekeying after graceful shutdown"));
+        } else if (_t("Rekey and Shutdown").equals(_action)) {
+            addFormNotice(_t("Rekeying after graceful shutdown"));
             registerWrapperNotifier(Router.EXIT_GRACEFUL, true);
             _context.router().shutdownGracefully(Router.EXIT_GRACEFUL);
-        } else if (_("Run I2P on startup").equals(_action)) {
+        } else if (_t("Run I2P on startup").equals(_action)) {
             installService();
-        } else if (_("Don't run I2P on startup").equals(_action)) {
+        } else if (_t("Don't run I2P on startup").equals(_action)) {
             uninstallService();
-        } else if (_("Dump threads").equals(_action)) {
+        } else if (_t("Dump threads").equals(_action)) {
             try {
                 WrapperManager.requestThreadDump();
             } catch (Throwable t) {
                 addFormError("Warning: unable to contact the service manager - " + t.getMessage());
             }
             File wlog = LogsHelper.wrapperLogFile(_context);
-            addFormNotice(_("Threads dumped to {0}", wlog.getAbsolutePath()));
-        } else if (_("View console on startup").equals(_action)) {
+            addFormNotice(_t("Threads dumped to {0}", wlog.getAbsolutePath()));
+        } else if (_t("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(_t("Console is to be shown on startup"));
+        } else if (_t("Do not view console on startup").equals(_action)) {
             browseOnStartup(false);
-            addFormNotice(_("Console is not to be shown on startup"));
-        } else if (_("Force GC").equals(_action)) {
+            addFormNotice(_t("Console is not to be shown on startup"));
+        } else if (_t("Force GC").equals(_action)) {
             Runtime.getRuntime().gc();
-            addFormNotice(_("Full garbage collection requested"));
+            addFormNotice(_t("Full garbage collection requested"));
         } else {
             //addFormNotice("Blah blah blah.  whatever.  I'm not going to " + _action);
         }
@@ -258,18 +258,18 @@ public class ConfigServiceHandler extends FormHandler {
     private void installService() {
         try { 
             Runtime.getRuntime().exec("install_i2p_service_winnt.bat");
-            addFormNotice(_("Service installed"));
+            addFormNotice(_t("Service installed"));
         } catch (IOException ioe) {
-            addFormError(_("Warning: unable to install the service") + " - " + ioe.getMessage());
+            addFormError(_t("Warning: unable to install the service") + " - " + ioe.getMessage());
         }
     }
 
     private void uninstallService() {
         try { 
             Runtime.getRuntime().exec("uninstall_i2p_service_winnt.bat");
-            addFormNotice(_("Service removed"));
+            addFormNotice(_t("Service removed"));
         } catch (IOException ioe) {
-            addFormError(_("Warning: unable to remove the service") + " - " + ioe.getMessage());
+            addFormError(_t("Warning: unable to remove the service") + " - " + ioe.getMessage());
         }
     }
 
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigStatsHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigStatsHandler.java
index 39dabd77ce..86e63a65f6 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigStatsHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigStatsHandler.java
@@ -113,16 +113,16 @@ public class ConfigStatsHandler extends FormHandler {
         changes.put(StatManager.PROP_STAT_FULL, "" + _isFull);
         _context.router().saveConfig(changes, null);
         if (!_stats.isEmpty())
-            addFormNotice(_("Stat filter and location updated successfully to") + ": " + stats.toString());
+            addFormNotice(_t("Stat filter and location updated successfully to") + ": " + stats.toString());
         if (fullChanged) {
             if (_isFull)
-                addFormNotice(_("Full statistics enabled"));
+                addFormNotice(_t("Full statistics enabled"));
             else
-                addFormNotice(_("Full statistics disabled"));
-            addFormNotice(_("Restart required to take effect"));
+                addFormNotice(_t("Full statistics disabled"));
+            addFormNotice(_t("Restart required to take effect"));
         }
         if (graphsChanged)
-            addFormNoticeNoEscape(_("Graph list updated, may take up to 60s to be reflected on the {0}Graphs Page{1}", "<a href=\"graphs\">", "</a>"));
+            addFormNoticeNoEscape(_t("Graph list updated, may take up to 60s to be reflected on the {0}Graphs Page{1}", "<a href=\"graphs\">", "</a>"));
     }
     
 }
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigStatsHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigStatsHelper.java
index 74cd64afb7..1f155442a3 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigStatsHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigStatsHelper.java
@@ -176,8 +176,8 @@ public class ConfigStatsHelper extends HelperBase {
      */
     private class AlphaComparator implements Comparator<String> {
         public int compare(String lhs, String rhs) {
-            String lname = _(lhs);
-            String rname = _(rhs);
+            String lname = _t(lhs);
+            String rname = _t(rhs);
             return Collator.getInstance().compare(lname, rname);
         }
     }
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigSummaryHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigSummaryHandler.java
index f6174755ed..7747d22b2e 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigSummaryHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigSummaryHandler.java
@@ -19,30 +19,30 @@ public class ConfigSummaryHandler extends FormHandler {
     protected void processForm() {
         if (_action == null) return;
         String group = getJettyString("group");
-        boolean deleting = _action.equals(_("Delete selected"));
-        boolean adding = _action.equals(_("Add item"));
-        boolean saving = _action.equals(_("Save order"));
+        boolean deleting = _action.equals(_t("Delete selected"));
+        boolean adding = _action.equals(_t("Add item"));
+        boolean saving = _action.equals(_t("Save order"));
         boolean moving = _action.startsWith("move_");
-        if (_action.equals(_("Save")) && "0".equals(group)) {
+        if (_action.equals(_t("Save")) && "0".equals(group)) {
             try {
                 int refreshInterval = Integer.parseInt(getJettyString("refreshInterval"));
                 if (refreshInterval >= CSSHelper.MIN_REFRESH) {
                     _context.router().saveConfig(CSSHelper.PROP_REFRESH, "" + refreshInterval);
-                    addFormNotice(_("Refresh interval changed"));
+                    addFormNotice(_t("Refresh interval changed"));
                 } else
-                    addFormError(_("Refresh interval must be at least {0} seconds", CSSHelper.MIN_REFRESH));
+                    addFormError(_t("Refresh interval must be at least {0} seconds", CSSHelper.MIN_REFRESH));
             } catch (java.lang.NumberFormatException e) {
-                addFormError(_("Refresh interval must be a number"));
+                addFormError(_t("Refresh interval must be a number"));
                 return;
             }
-        } else if (_action.equals(_("Restore full default"))) {
+        } else if (_action.equals(_t("Restore full default"))) {
             _context.router().saveConfig(SummaryHelper.PROP_SUMMARYBAR + "default", SummaryHelper.DEFAULT_FULL);
-            addFormNotice(_("Full summary bar default restored.") + " " +
-                          _("Summary bar will refresh shortly."));
-        } else if (_action.equals(_("Restore minimal default"))) {
+            addFormNotice(_t("Full summary bar default restored.") + " " +
+                          _t("Summary bar will refresh shortly."));
+        } else if (_action.equals(_t("Restore minimal default"))) {
             _context.router().saveConfig(SummaryHelper.PROP_SUMMARYBAR + "default", SummaryHelper.DEFAULT_MINIMAL);
-            addFormNotice(_("Minimal summary bar default restored.") + " " +
-                          _("Summary bar will refresh shortly."));
+            addFormNotice(_t("Minimal summary bar default restored.") + " " +
+                          _t("Summary bar will refresh shortly."));
         } else if (adding || deleting || saving || moving) {
             Map<Integer, String> sections = new TreeMap<Integer, String>();
             for (Object o : _settings.keySet()) {
@@ -58,19 +58,19 @@ public class ConfigSummaryHandler extends FormHandler {
                     int order = Integer.parseInt(v);
                     sections.put(order, k);
                 } catch (java.lang.NumberFormatException e) {
-                    addFormError(_("Order must be an integer"));
+                    addFormError(_t("Order must be an integer"));
                     return;
                 }
             }
             if (adding) {
                 String name = getJettyString("name");
                 if (name == null || name.length() <= 0) {
-                    addFormError(_("No section selected"));
+                    addFormError(_t("No section selected"));
                     return;
                 }
                 String order = getJettyString("order");
                 if (order == null || order.length() <= 0) {
-                    addFormError(_("No order entered"));
+                    addFormError(_t("No order entered"));
                     return;
                 }
                 name = DataHelper.escapeHTML(name).replace(",", "&#44;");
@@ -78,9 +78,9 @@ public class ConfigSummaryHandler extends FormHandler {
                 try {
                     int ki = Integer.parseInt(order);
                     sections.put(ki, name);
-                    addFormNotice(_("Added") + ": " + name);
+                    addFormNotice(_t("Added") + ": " + name);
                 } catch (java.lang.NumberFormatException e) {
-                    addFormError(_("Order must be an integer"));
+                    addFormError(_t("Order must be an integer"));
                     return;
                 }
             } else if (deleting) {
@@ -104,7 +104,7 @@ public class ConfigSummaryHandler extends FormHandler {
                     if (toDelete.contains(i)) {
                         String removedName = sections.get(i);
                         iter.remove();
-                        addFormNotice(_("Removed") + ": " + removedName);
+                        addFormNotice(_t("Removed") + ": " + removedName);
                     }
                 }
             } else if (moving) {
@@ -126,17 +126,17 @@ public class ConfigSummaryHandler extends FormHandler {
                         sections.put(i + n, sections.get(i));
                         sections.put(i, temp);
                     }
-                    addFormNotice(_("Moved") + ": " + sections.get(to));
+                    addFormNotice(_t("Moved") + ": " + sections.get(to));
                 } catch (java.lang.NumberFormatException e) {
-                    addFormError(_("Order must be an integer"));
+                    addFormError(_t("Order must be an integer"));
                     return;
                 }
             }
             SummaryHelper.saveSummaryBarSections(_context, "default", sections);
-            addFormNotice(_("Saved order of sections.") + " " +
-                          _("Summary bar will refresh shortly."));
+            addFormNotice(_t("Saved order of sections.") + " " +
+                          _t("Summary bar will refresh shortly."));
         } else {
-            //addFormError(_("Unsupported"));
+            //addFormError(_t("Unsupported"));
         }
     }
 
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigTunnelsHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigTunnelsHandler.java
index ad444c9a6a..bbc93dab28 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigTunnelsHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigTunnelsHandler.java
@@ -27,7 +27,7 @@ public class ConfigTunnelsHandler extends FormHandler {
     }
     
     public void setShouldsave(String moo) { 
-        if ( (moo != null) && (moo.equals(_("Save changes"))) )
+        if ( (moo != null) && (moo.equals(_t("Save changes"))) )
             _shouldSave = true; 
     }
     
@@ -127,14 +127,14 @@ public class ConfigTunnelsHandler extends FormHandler {
         if (updated > 0)
             // the count isn't really correct anyway, since we don't check for actual changes
             //addFormNotice("Updated settings for " + updated + " pools.");
-            addFormNotice(_("Updated settings for all pools."));
+            addFormNotice(_t("Updated settings for all pools."));
         
         if (saveRequired) {
             boolean saved = _context.router().saveConfig(changes, null);
             if (saved) 
-                addFormNotice(_("Exploratory tunnel configuration saved successfully."));
+                addFormNotice(_t("Exploratory tunnel configuration saved successfully."));
             else
-                addFormError(_("Error saving the configuration (applied but not saved) - please see the error logs."));
+                addFormError(_t("Error saving the configuration (applied but not saved) - please see the error logs."));
         }
     }
 
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigTunnelsHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigTunnelsHelper.java
index d66c44777a..6e93602f4a 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigTunnelsHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigTunnelsHelper.java
@@ -30,7 +30,7 @@ public class ConfigTunnelsHelper extends HelperBase {
         TunnelPoolSettings exploratoryIn = _context.tunnelManager().getInboundSettings();
         TunnelPoolSettings exploratoryOut = _context.tunnelManager().getOutboundSettings();
         
-        renderForm(buf, 0, "exploratory", _("Exploratory tunnels"), exploratoryIn, exploratoryOut);
+        renderForm(buf, 0, "exploratory", _t("Exploratory tunnels"), exploratoryIn, exploratoryOut);
         
         cur = 1;
         for (Destination dest : clients) {
@@ -46,7 +46,7 @@ public class ConfigTunnelsHelper extends HelperBase {
                 name = dest.calculateHash().toBase64().substring(0,6);
         
             String prefix = dest.calculateHash().toBase64().substring(0,4);
-            renderForm(buf, cur, prefix, _("Client tunnels for {0}", DataHelper.escapeHTML(_(name))), in, out);
+            renderForm(buf, cur, prefix, _t("Client tunnels for {0}", DataHelper.escapeHTML(_t(name))), in, out);
             cur++;
         }
         
@@ -75,26 +75,26 @@ 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\">" + _t("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\">" + _t("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\">" + _t("PERFORMANCE WARNING - Settings include very long tunnels.") + "</font></th></tr>");
         if (in.getTotalQuantity() >= WARN_QUANTITY ||
             out.getTotalQuantity() >= 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\">" + _t("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\">&nbsp;&nbsp;" + _("Inbound") + "</th><th><img src=\"/themes/console/images/outbound.png\" alt=\"Outbound Tunnels\" title=\"Outbound\">&nbsp;&nbsp;" + _("Outbound") + "</th></tr>\n");
+        buf.append("<tr><th></th><th><img src=\"/themes/console/images/inbound.png\" alt=\"Inbound\" title=\"Inbound Tunnels\">&nbsp;&nbsp;" + _t("Inbound") + "</th><th><img src=\"/themes/console/images/outbound.png\" alt=\"Outbound Tunnels\" title=\"Outbound\">&nbsp;&nbsp;" + _t("Outbound") + "</th></tr>\n");
 
 //        buf.append("<tr><th></th><th>Inbound</th><th>Outbound</th></tr>\n");
         
         // tunnel depth
         int maxLength = advanced ? MAX_ADVANCED_LENGTH : MAX_LENGTH;
-        buf.append("<tr><td align=\"right\" class=\"mediumtags\">" + _("Length") + ":</td>\n");
+        buf.append("<tr><td align=\"right\" class=\"mediumtags\">" + _t("Length") + ":</td>\n");
         buf.append("<td align=\"center\"><select name=\"").append(index).append(".depthInbound\">\n");
         int now = in.getLength();
         renderOptions(buf, 0, maxLength, now, "", HOP);
@@ -111,7 +111,7 @@ public class ConfigTunnelsHelper extends HelperBase {
         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\">" + _t("Randomization") + ":</td>\n");
         buf.append("<td align=\"center\"><select name=\"").append(index).append(".varianceInbound\">\n");
         now = in.getLengthVariance();
         renderOptions(buf, 0, 0, now, "", HOP);
@@ -136,7 +136,7 @@ public class ConfigTunnelsHelper extends HelperBase {
 
         // tunnel quantity
         int maxQuantity = advanced ? MAX_ADVANCED_QUANTITY : MAX_QUANTITY;
-        buf.append("<tr><td align=\"right\" class=\"mediumtags\">" + _("Quantity") + ":</td>\n");
+        buf.append("<tr><td align=\"right\" class=\"mediumtags\">" + _t("Quantity") + ":</td>\n");
         buf.append("<td align=\"center\"><select name=\"").append(index).append(".quantityInbound\">\n");
         now = in.getQuantity();
         renderOptions(buf, 1, maxQuantity, now, "", TUNNEL);
@@ -154,7 +154,7 @@ public class ConfigTunnelsHelper extends HelperBase {
 
         // tunnel backup quantity
         int maxBQuantity = advanced ? MAX_ADVANCED_BACKUP_QUANTITY : MAX_BACKUP_QUANTITY;
-        buf.append("<tr><td align=\"right\" class=\"mediumtags\">" + _("Backup quantity") + ":</td>\n");
+        buf.append("<tr><td align=\"right\" class=\"mediumtags\">" + _t("Backup quantity") + ":</td>\n");
         buf.append("<td align=\"center\"><select name=\"").append(index).append(".backupInbound\">\n");
         now = in.getBackupQuantity();
         renderOptions(buf, 0, maxBQuantity, now, "", TUNNEL);
@@ -176,7 +176,7 @@ public class ConfigTunnelsHelper extends HelperBase {
         // And let's not display them at all unless they have contents, which should be rare.
         Properties props = in.getUnknownOptions();
         if (!props.isEmpty()) {
-            buf.append("<tr><td align=\"right\" class=\"mediumtags\">" + _("Inbound options") + ":</td>\n" +
+            buf.append("<tr><td align=\"right\" class=\"mediumtags\">" + _t("Inbound options") + ":</td>\n" +
                        "<td colspan=\"2\" align=\"center\"><input name=\"").append(index);
             buf.append(".inboundOptions\" type=\"text\" size=\"32\" disabled=\"disabled\" " +
                        "value=\"");
@@ -188,7 +188,7 @@ public class ConfigTunnelsHelper extends HelperBase {
         }
         props = out.getUnknownOptions();
         if (!props.isEmpty()) {
-            buf.append("<tr><td align=\"right\" class=\"mediumtags\">" + _("Outbound options") + ":</td>\n" +
+            buf.append("<tr><td align=\"right\" class=\"mediumtags\">" + _t("Outbound options") + ":</td>\n" +
                        "<td colspan=\"2\" align=\"center\"><input name=\"").append(index);
             buf.append(".outboundOptions\" type=\"text\" size=\"32\" disabled=\"disabled\" " +
                        "value=\"");
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHandler.java
index 7a9b2c406b..b5b6a54375 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHandler.java
@@ -16,9 +16,9 @@ public class ConfigUIHandler extends FormHandler {
     protected void processForm() {
         if (_shouldSave) {
             saveChanges();
-        } else if (_action.equals(_("Delete selected"))) {
+        } else if (_action.equals(_t("Delete selected"))) {
             delUser();
-        } else if (_action.equals(_("Add user"))) {
+        } else if (_action.equals(_t("Add user"))) {
             addUser();
         }
     }
@@ -60,29 +60,29 @@ public class ConfigUIHandler extends FormHandler {
         boolean ok = _context.router().saveConfig(changes, removes);
         if (ok) {
             if (!oldTheme.equals(_config))
-                addFormNoticeNoEscape(_("Theme change saved.") +
+                addFormNoticeNoEscape(_t("Theme change saved.") +
                               " <a href=\"configui\">" +
-                              _("Refresh the page to view.") +
+                              _t("Refresh the page to view.") +
                               "</a>");
             if (oldForceMobileConsole != _forceMobileConsole)
-                addFormNoticeNoEscape(_("Mobile console option saved.") +
+                addFormNoticeNoEscape(_t("Mobile console option saved.") +
                               " <a href=\"configui\">" +
-                              _("Refresh the page to view.") +
+                              _t("Refresh the page to view.") +
                               "</a>");
         } else {
-            addFormError(_("Error saving the configuration (applied but not saved) - please see the error logs."));
+            addFormError(_t("Error saving the configuration (applied but not saved) - please see the error logs."));
         }
     }
 
     private void addUser() {
         String name = getJettyString("name");
         if (name == null || name.length() <= 0) {
-            addFormError(_("No user name entered"));
+            addFormError(_t("No user name entered"));
             return;
         }
         String pw = getJettyString("nofilter_pw");
         if (pw == null || pw.length() <= 0) {
-            addFormError(_("No password entered"));
+            addFormError(_t("No password entered"));
             return;
         }
         ConsolePasswordManager mgr = new ConsolePasswordManager(_context);
@@ -90,10 +90,10 @@ public class ConfigUIHandler extends FormHandler {
         if (mgr.saveMD5(RouterConsoleRunner.PROP_CONSOLE_PW, RouterConsoleRunner.JETTY_REALM, name, pw)) {
             if (!_context.getBooleanProperty(RouterConsoleRunner.PROP_PW_ENABLE))
                 _context.router().saveConfig(RouterConsoleRunner.PROP_PW_ENABLE, "true");
-            addFormNotice(_("Added user {0}", name));
-            addFormError(_("Restart required to take effect"));
+            addFormNotice(_t("Added user {0}", name));
+            addFormError(_t("Restart required to take effect"));
         } else {
-            addFormError(_("Error saving the configuration (applied but not saved) - please see the error logs."));
+            addFormError(_t("Error saving the configuration (applied but not saved) - please see the error logs."));
         }
     }
 
@@ -108,13 +108,13 @@ public class ConfigUIHandler extends FormHandler {
                 continue;
             k = k.substring(7);
             if (mgr.remove(RouterConsoleRunner.PROP_CONSOLE_PW, k)) {
-                addFormNotice(_("Removed user {0}", k));
+                addFormNotice(_t("Removed user {0}", k));
                 success = true;
             } else {
-                addFormError(_("Error saving the configuration (applied but not saved) - please see the error logs."));
+                addFormError(_t("Error saving the configuration (applied but not saved) - please see the error logs."));
             }
         }
         if (success)
-            addFormError(_("Restart required to take effect"));
+            addFormError(_t("Restart required to take effect"));
     }
 }
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHelper.java
index 294cc6dc0f..1432de98b9 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHelper.java
@@ -15,14 +15,14 @@ public class ConfigUIHelper extends HelperBase {
             buf.append("<input type=\"radio\" class=\"optbox\" name=\"theme\" ");
             if (theme.equals(current))
                 buf.append("checked=\"checked\" ");
-            buf.append("value=\"").append(theme).append("\">").append(_(theme)).append("<br>\n");
+            buf.append("value=\"").append(theme).append("\">").append(_t(theme)).append("<br>\n");
         }
         boolean universalTheming = _context.getBooleanProperty(CSSHelper.PROP_UNIVERSAL_THEMING);
         buf.append("<input type=\"checkbox\" name=\"universalTheming\" ");
         if (universalTheming)
             buf.append("checked=\"checked\" ");
         buf.append("value=\"1\">")
-           .append(_("Set theme universally across all apps"))
+           .append(_t("Set theme universally across all apps"))
            .append("<br>\n");
         return buf.toString();
     }
@@ -34,7 +34,7 @@ public class ConfigUIHelper extends HelperBase {
         if (forceMobileConsole)
             buf.append("checked=\"checked\" ");
         buf.append("value=\"1\">")
-           .append(_("Force the mobile console to be used"))
+           .append(_t("Force the mobile console to be used"))
            .append("<br>\n");
         return buf.toString();
     }
@@ -163,13 +163,13 @@ public class ConfigUIHelper extends HelperBase {
         buf.append("<table>");
         if (userpw.isEmpty()) {
             buf.append("<tr><td colspan=\"3\">");
-            buf.append(_("Add a user and password to enable."));
+            buf.append(_t("Add a user and password to enable."));
             buf.append("</td></tr>");
         } else {
             buf.append("<tr><th>")
-               .append(_("Remove"))
+               .append(_t("Remove"))
                .append("</th><th>")
-               .append(_("User Name"))
+               .append(_t("User Name"))
                .append("</th><th>&nbsp;</th></tr>\n");
             for (String name : userpw.keySet()) {
                 buf.append("<tr><td align=\"center\"><input type=\"checkbox\" class=\"optbox\" name=\"delete_")
@@ -180,10 +180,10 @@ public class ConfigUIHelper extends HelperBase {
             }
         }
         buf.append("<tr><td align=\"center\"><b>")
-           .append(_("Add")).append(":</b>" +
+           .append(_t("Add")).append(":</b>" +
                    "</td><td align=\"left\"><input type=\"text\" name=\"name\">" +
                    "</td><td align=\"left\"><b>");
-        buf.append(_("Password")).append(":</b> " +
+        buf.append(_t("Password")).append(":</b> " +
                    "<input type=\"password\" size=\"40\" name=\"nofilter_pw\"></td></tr>" +
                    "</table>\n");
         return buf.toString();
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigUpdateHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigUpdateHandler.java
index 7f8c75dfd3..744d996835 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigUpdateHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigUpdateHandler.java
@@ -157,14 +157,14 @@ public class ConfigUpdateHandler extends FormHandler {
     protected void processForm() {
         if (_action == null)
             return;
-        if (_action.equals(_("Check for updates"))) {
+        if (_action.equals(_t("Check for updates"))) {
             ConsoleUpdateManager mgr = UpdateHandler.updateManager(_context);
             if (mgr == null) {
                 addFormError("Update manager not registered, cannot check");
                 return;
             }
             if (mgr.isUpdateInProgress() || mgr.isCheckInProgress()) {
-                addFormError(_("Update or check already in progress"));
+                addFormError(_t("Update or check already in progress"));
                 return;
             }
 
@@ -174,7 +174,7 @@ public class ConfigUpdateHandler extends FormHandler {
             if (shouldProxy && proxyPort == ConfigUpdateHandler.DEFAULT_PROXY_PORT_INT &&
                 proxyHost.equals(ConfigUpdateHandler.DEFAULT_PROXY_HOST) &&
                 _context.portMapper().getPort(PortMapper.SVC_HTTP_PROXY) < 0) {
-                addFormError(_("HTTP client proxy tunnel must be running"));
+                addFormError(_t("HTTP client proxy tunnel must be running"));
                 return;
             }
 
@@ -187,19 +187,19 @@ public class ConfigUpdateHandler extends FormHandler {
                 a3 = mgr.checkAvailable(ROUTER_UNSIGNED, 40*1000) != null;
             if (a1 || a2 || a3) {
                 if ( (_updatePolicy == null) || (!_updatePolicy.equals("notify")) )
-                    addFormNotice(_("Update available, attempting to download now"));
+                    addFormNotice(_t("Update available, attempting to download now"));
                 else
-                    addFormNotice(_("Update available, click button on left to download"));
+                    addFormNotice(_t("Update available, click button on left to download"));
                 // So that update() will post a status to the summary bar before we reload
                 try {
                     Thread.sleep(1000);
                 } catch (InterruptedException ie) {}
             } else
-                addFormNotice(_("No update available"));
+                addFormNotice(_t("No update available"));
             return;
         }
 
-        if (!_action.equals(_("Save")))
+        if (!_action.equals(_t("Save")))
             return;
 
         Map<String, String> changes = new HashMap<String, String>();
@@ -213,26 +213,26 @@ public class ConfigUpdateHandler extends FormHandler {
                     changes.put(PROP_NEWS_URL, _newsURL);
                     // this invalidates the news
                     changes.put(NewsHelper.PROP_LAST_CHECKED, "0");
-                    addFormNotice(_("Updating news URL to {0}", _newsURL));
+                    addFormNotice(_t("Updating news URL to {0}", _newsURL));
                 } else {
                     addFormError("Changing news URL disabled");
                 }
             }
         }
         
-        if (_proxyHost != null && _proxyHost.length() > 0 && !_proxyHost.equals(_("internal"))) {
+        if (_proxyHost != null && _proxyHost.length() > 0 && !_proxyHost.equals(_t("internal"))) {
             String oldHost = _context.router().getConfigSetting(PROP_PROXY_HOST);
             if ( (oldHost == null) || (!_proxyHost.equals(oldHost)) ) {
                 changes.put(PROP_PROXY_HOST, _proxyHost);
-                addFormNotice(_("Updating proxy host to {0}", _proxyHost));
+                addFormNotice(_t("Updating proxy host to {0}", _proxyHost));
             }
         }
         
-        if (_proxyPort != null && _proxyPort.length() > 0 && !_proxyPort.equals(_("internal"))) {
+        if (_proxyPort != null && _proxyPort.length() > 0 && !_proxyPort.equals(_t("internal"))) {
             String oldPort = _context.router().getConfigSetting(PROP_PROXY_PORT);
             if ( (oldPort == null) || (!_proxyPort.equals(oldPort)) ) {
                 changes.put(PROP_PROXY_PORT, _proxyPort);
-                addFormNotice(_("Updating proxy port to {0}", _proxyPort));
+                addFormNotice(_t("Updating proxy port to {0}", _proxyPort));
             }
         }
         
@@ -248,15 +248,15 @@ public class ConfigUpdateHandler extends FormHandler {
         try { oldFreq = Long.parseLong(oldFreqStr); } catch (NumberFormatException nfe) {}
         if (_refreshFrequency != oldFreq) {
             changes.put(PROP_REFRESH_FREQUENCY, ""+_refreshFrequency);
-            addFormNoticeNoEscape(_("Updating refresh frequency to {0}",
-                            _refreshFrequency <= 0 ? _("Never") : DataHelper.formatDuration2(_refreshFrequency)));
+            addFormNoticeNoEscape(_t("Updating refresh frequency to {0}",
+                            _refreshFrequency <= 0 ? _t("Never") : DataHelper.formatDuration2(_refreshFrequency)));
         }
 
         if ( (_updatePolicy != null) && (_updatePolicy.length() > 0) ) {
             String oldPolicy = _context.router().getConfigSetting(PROP_UPDATE_POLICY);
             if ( (oldPolicy == null) || (!_updatePolicy.equals(oldPolicy)) ) {
                 changes.put(PROP_UPDATE_POLICY, _updatePolicy);
-                addFormNotice(_("Updating update policy to {0}", _updatePolicy));
+                addFormNotice(_t("Updating update policy to {0}", _updatePolicy));
             }
         }
 
@@ -265,7 +265,7 @@ public class ConfigUpdateHandler extends FormHandler {
             String oldURL = _context.router().getConfigSetting(PROP_UPDATE_URL);
             if ( (oldURL == null) || (!_updateURL.equals(oldURL)) ) {
                 changes.put(PROP_UPDATE_URL, _updateURL);
-                addFormNotice(_("Updating update URLs."));
+                addFormNotice(_t("Updating update URLs."));
             }
         }
 
@@ -277,7 +277,7 @@ public class ConfigUpdateHandler extends FormHandler {
                 // note that keys are not validated here and no console error message will be generated
                 if (isAdvanced()) {
                     changes.put(PROP_TRUSTED_KEYS, _trustedKeys);
-                    addFormNotice(_("Updating trusted keys."));
+                    addFormNotice(_t("Updating trusted keys."));
                 } else {
                     addFormError("Changing trusted keys disabled");
                 }
@@ -289,7 +289,7 @@ public class ConfigUpdateHandler extends FormHandler {
             if ( (oldURL == null) || (!_zipURL.equals(oldURL)) ) {
                 if (isAdvanced()) {
                     changes.put(PROP_ZIP_URL, _zipURL);
-                    addFormNotice(_("Updating unsigned update URL to {0}", _zipURL));
+                    addFormNotice(_t("Updating unsigned update URL to {0}", _zipURL));
                 } else {
                     addFormError("Changing unsigned update URL disabled");
                 }
@@ -301,7 +301,7 @@ public class ConfigUpdateHandler extends FormHandler {
             if ( (oldURL == null) || (!_devSU3URL.equals(oldURL)) ) {
                 if (isAdvanced()) {
                     changes.put(PROP_DEV_SU3_URL, _devSU3URL);
-                    addFormNotice(_("Updating signed development build URL to {0}", _devSU3URL));
+                    addFormNotice(_t("Updating signed development build URL to {0}", _devSU3URL));
                 } else {
                     addFormError("Changing signed update URL disabled");
                 }
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigUpdateHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigUpdateHelper.java
index 3df84ceb5e..93644982f8 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigUpdateHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigUpdateHelper.java
@@ -51,13 +51,13 @@ public class ConfigUpdateHelper extends HelperBase {
 
     public String getProxyHost() {
         if (isInternal())
-            return _("internal") + "\" readonly=\"readonly";
+            return _t("internal") + "\" readonly=\"readonly";
         return _context.getProperty(ConfigUpdateHandler.PROP_PROXY_HOST, ConfigUpdateHandler.DEFAULT_PROXY_HOST);
     }
 
     public String getProxyPort() {
         if (isInternal())
-            return _("internal") + "\" readonly=\"readonly";
+            return _t("internal") + "\" readonly=\"readonly";
         return Integer.toString(ConfigUpdateHandler.proxyPort(_context));
     }
 
@@ -127,9 +127,9 @@ public class ConfigUpdateHelper extends HelperBase {
                 buf.append("\" selected=\"selected");
             
             if (PERIODS[i] == -1)
-                buf.append("\">").append(_("Never")).append("</option>\n");
+                buf.append("\">").append(_t("Never")).append("</option>\n");
             else
-                buf.append("\">").append(_("Every")).append(' ').append(DataHelper.formatDuration2(PERIODS[i])).append("</option>\n");
+                buf.append("\">").append(_t("Every")).append(' ').append(DataHelper.formatDuration2(PERIODS[i])).append("</option>\n");
         }
         buf.append("</select>\n");
         return buf.toString();
@@ -147,14 +147,14 @@ public class ConfigUpdateHelper extends HelperBase {
         buf.append("<option value=\"notify\"");
         if ("notify".equals(policy) || _dontInstall)
             buf.append(" selected=\"selected\"");
-        buf.append('>').append(_("Notify only")).append("</option>");
+        buf.append('>').append(_t("Notify only")).append("</option>");
 
         buf.append("<option value=\"download\"");
         if (_dontInstall)
             buf.append(" disabled=\"disabled\"");
         else if ("download".equals(policy))
             buf.append(" selected=\"selected\"");
-        buf.append('>').append(_("Download and verify only")).append("</option>");
+        buf.append('>').append(_t("Download and verify only")).append("</option>");
         
         if (_context.hasWrapper()) {
             buf.append("<option value=\"install\"");
@@ -162,7 +162,7 @@ public class ConfigUpdateHelper extends HelperBase {
                 buf.append(" disabled=\"disabled\"");
             else if ("install".equals(policy))
                 buf.append(" selected=\"selected\"");
-            buf.append('>').append(_("Download, verify, and restart")).append("</option>");
+            buf.append('>').append(_t("Download, verify, and restart")).append("</option>");
         }
         
         buf.append("</select>\n");
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/EventLogHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/EventLogHelper.java
index 492c006e2b..f42e1cd6e2 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/EventLogHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/EventLogHelper.java
@@ -66,7 +66,7 @@ public class EventLogHelper extends FormHandler {
     public void setContextId(String contextId) {
         super.setContextId(contextId);
         for (int i = 0; i < _events.length; i += 2) {
-            _xevents.put(_events[i], _(_events[i + 1]));
+            _xevents.put(_events[i], _t(_events[i + 1]));
         }
     }
     
@@ -99,27 +99,27 @@ public class EventLogHelper extends FormHandler {
         // So just use the "shared/console nonce".
         String nonce = CSSHelper.getNonce();
         try {
-            _out.write("<br><h3>" + _("Display Events") + "</h3>");
+            _out.write("<br><h3>" + _t("Display Events") + "</h3>");
             _out.write("<form action=\"events\" method=\"POST\">\n" +
                        "<input type=\"hidden\" name=\"action\" value=\"save\">\n" +
                        "<input type=\"hidden\" name=\"nonce\" value=\"" + nonce + "\" >\n");
-            _out.write(_("Events since") + ": <select name=\"from\">");
+            _out.write(_t("Events since") + ": <select name=\"from\">");
             for (int i = 0; i < _times.length; i++) {
                 writeOption(_times[i]);
             }
             _out.write("</select><br>");
-            _out.write(_("Event type") + ": <select name=\"type\">");
+            _out.write(_t("Event type") + ": <select name=\"type\">");
             // sorted by translated display string
             Map<String, String> events = new TreeMap<String, String>(Collator.getInstance());
             for (int i = 0; i < _events.length; i += 2) {
                 events.put(_xevents.get(_events[i]), _events[i]);
             }
-            writeOption(_("All events"), ALL);
+            writeOption(_t("All events"), ALL);
             for (Map.Entry<String, String> e : events.entrySet()) {
                 writeOption(e.getKey(), e.getValue());
             }
             _out.write("</select>" +
-                       "<hr><div class=\"formaction\"><input type=\"submit\" class=\"accept\" value=\"" + _("Filter events") + "\"></div></form>");
+                       "<hr><div class=\"formaction\"><input type=\"submit\" class=\"accept\" value=\"" + _t("Filter events") + "\"></div></form>");
         } catch (IOException ioe) {
             ioe.printStackTrace();
         }
@@ -145,7 +145,7 @@ public class EventLogHelper extends FormHandler {
              _out.write(" selected=\"selected\"");
          _out.write(">");
          if (age == 0)
-             _out.write(_("All events"));
+             _out.write(_t("All events"));
          else
              _out.write(DataHelper.formatDuration2(age));
          _out.write("</option>\n");
@@ -167,21 +167,21 @@ public class EventLogHelper extends FormHandler {
         if (events.isEmpty()) {
             if (isAll) {
                 if (_age == 0)
-                    return _("No events found");
-                return _("No events found in previous {0}", DataHelper.formatDuration2(_age));
+                    return _t("No events found");
+                return _t("No events found in previous {0}", DataHelper.formatDuration2(_age));
             }
             if (_age == 0)
-                return _("No \"{0}\" events found", xev);
-            return _("No \"{0}\" events found in previous {1}", xev, DataHelper.formatDuration2(_age));
+                return _t("No \"{0}\" events found", xev);
+            return _t("No \"{0}\" events found in previous {1}", xev, DataHelper.formatDuration2(_age));
         }
         StringBuilder buf = new StringBuilder(2048);
         buf.append("<table><tr><th>");
-        buf.append(_("Time"));
+        buf.append(_t("Time"));
         buf.append("</th><th>");
         if (isAll) {
-            buf.append(_("Event"));
+            buf.append(_t("Event"));
             buf.append("</th><th>");
-            buf.append(_("Details"));
+            buf.append(_t("Details"));
         } else {
             buf.append(xev);
         }
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 a56f8f7ad1..1b2dabb3a7 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/FormHandler.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/FormHandler.java
@@ -248,9 +248,9 @@ public abstract class FormHandler {
         }
         
         if (!_nonce.equals(_nonce1) && !_nonce.equals(_nonce2)) {
-                addFormError(_("Invalid form submission, probably because you used the 'back' or 'reload' button on your browser. Please resubmit.")
+                addFormError(_t("Invalid form submission, probably because you used the 'back' or 'reload' button on your browser. Please resubmit.")
                              + ' ' +
-                             _("If the problem persists, verify that you have cookies enabled in your browser."));
+                             _t("If the problem persists, verify that you have cookies enabled in your browser."));
                 _valid = false;
         }
     }
@@ -291,28 +291,28 @@ public abstract class FormHandler {
     }
 
     /** translate a string */
-    public String _(String s) {
+    public String _t(String s) {
         return Messages.getString(s, _context);
     }
 
     /**
      *  translate a string with a parameter
-     *  This is a lot more expensive than _(s), so use sparingly.
+     *  This is a lot more expensive than _t(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"))
+     *    To tranlslate parameter also, use _t("foo {0} bar", _t("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) {
+    public String _t(String s, Object o) {
         return Messages.getString(s, o, _context);
     }
 
     /** two params @since 0.8.2 */
-    public String _(String s, Object o, Object o2) {
+    public String _t(String s, Object o, Object o2) {
         return Messages.getString(s, o, o2, _context);
     }
 
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/GraphHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/GraphHelper.java
index eff8dc3e36..ab35a104a4 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/GraphHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/GraphHelper.java
@@ -159,7 +159,7 @@ public class GraphHelper extends FormHandler {
                            + "&amp;w=" + (3 * _width)
                            + "&amp;h=" + (3 * _height)
                            + "\">");
-                String title = _("Combined bandwidth graph");
+                String title = _t("Combined bandwidth graph");
                 _out.write("<img class=\"statimage\""
                            + " src=\"viewstat.jsp?stat=bw.combined"
                            + "&amp;periodCount=" + _periodCount 
@@ -171,7 +171,7 @@ public class GraphHelper extends FormHandler {
             for (SummaryListener lsnr : ordered) {
                 Rate r = lsnr.getRate();
                 // e.g. "statname for 60m"
-                String title = _("{0} for {1}", r.getRateStat().getName(), DataHelper.formatDuration2(_periodCount * r.getPeriod()));
+                String title = _t("{0} for {1}", r.getRateStat().getName(), DataHelper.formatDuration2(_periodCount * r.getPeriod()));
                 _out.write("<a href=\"graph?stat="
                            + r.getRateStat().getName() 
                            + '.' + r.getPeriod() 
@@ -194,7 +194,7 @@ public class GraphHelper extends FormHandler {
 
             // FIXME jrobin doesn't support setting the timezone, will have to mod TimeAxis.java
             // 0.9.1 - all graphs currently state UTC on them, so this text blurb is unnecessary,
-            //_out.write("<p><i>" + _("All times are UTC.") + "</i></p>\n");
+            //_out.write("<p><i>" + _t("All times are UTC.") + "</i></p>\n");
         } catch (IOException ioe) {
             ioe.printStackTrace();
         }
@@ -220,7 +220,7 @@ public class GraphHelper extends FormHandler {
             if (_stat.equals("bw.combined")) {
                 period = 60000;
                 name = _stat;
-                displayName = _("Bandwidth usage");
+                displayName = _t("Bandwidth usage");
             } else {
                 Set<Rate> rates = StatSummarizer.instance().parseSpecs(_stat);
                 if (rates.size() != 1) {
@@ -233,9 +233,9 @@ public class GraphHelper extends FormHandler {
                 displayName = name;
             }
             _out.write("<h3>");
-            _out.write(_("{0} for {1}", displayName, DataHelper.formatDuration2(_periodCount * period)));
+            _out.write(_t("{0} for {1}", displayName, DataHelper.formatDuration2(_periodCount * period)));
             if (_end > 0)
-                _out.write(' ' + _("ending {0} ago", DataHelper.formatDuration2(_end * period)));
+                _out.write(' ' + _t("ending {0} ago", DataHelper.formatDuration2(_end * period)));
 
             _out.write("</h3><img class=\"statimage\" border=\"0\""
                        + " src=\"viewstat.jsp?stat="
@@ -250,57 +250,57 @@ public class GraphHelper extends FormHandler {
 
             if (_width < MAX_X && _height < MAX_Y) {
                 _out.write(link(_stat, _showEvents, _periodCount, _end, _width * 3 / 2, _height * 3 / 2));
-                _out.write(_("Larger"));
+                _out.write(_t("Larger"));
                 _out.write("</a> - ");
             }
 
             if (_width > MIN_X && _height > MIN_Y) {
                 _out.write(link(_stat, _showEvents, _periodCount, _end, _width * 2 / 3, _height * 2 / 3));
-                _out.write(_("Smaller"));
+                _out.write(_t("Smaller"));
                 _out.write("</a> - ");
             }
 
             if (_height < MAX_Y) {
                 _out.write(link(_stat, _showEvents, _periodCount, _end, _width, _height * 3 / 2));
-                _out.write(_("Taller"));
+                _out.write(_t("Taller"));
                 _out.write("</a> - ");
             }
 
             if (_height > MIN_Y) {
                 _out.write(link(_stat, _showEvents, _periodCount, _end, _width, _height * 2 / 3));
-                _out.write(_("Shorter"));
+                _out.write(_t("Shorter"));
                 _out.write("</a> - ");
             }
 
             if (_width < MAX_X) {
                 _out.write(link(_stat, _showEvents, _periodCount, _end, _width * 3 / 2, _height));
-                _out.write(_("Wider"));
+                _out.write(_t("Wider"));
                 _out.write("</a> - ");
             }
 
             if (_width > MIN_X) {
                 _out.write(link(_stat, _showEvents, _periodCount, _end, _width * 2 / 3, _height));
-                _out.write(_("Narrower"));
+                _out.write(_t("Narrower"));
                 _out.write("</a>");
             }
 
             _out.write("<br>");
             if (_periodCount < MAX_C) {
                 _out.write(link(_stat, _showEvents, _periodCount * 2, _end, _width, _height));
-                _out.write(_("Larger interval"));
+                _out.write(_t("Larger interval"));
                 _out.write("</a> - ");
             }
 
             if (_periodCount > MIN_C) {
                 _out.write(link(_stat, _showEvents, _periodCount / 2, _end, _width, _height));
-                _out.write(_("Smaller interval"));
+                _out.write(_t("Smaller interval"));
                 _out.write("</a>");
             }
 
             _out.write("<br>");
             if (_periodCount < MAX_C) {
                 _out.write(link(_stat, _showEvents, _periodCount, _end + _periodCount, _width, _height));
-                _out.write(_("Previous interval"));
+                _out.write(_t("Previous interval"));
                 _out.write("</a>");
             }
 
@@ -311,17 +311,17 @@ public class GraphHelper extends FormHandler {
                 if (_periodCount < MAX_C)
                     _out.write(" - ");
                 _out.write(link(_stat, _showEvents, _periodCount, end, _width, _height));
-                _out.write(_("Next interval"));
+                _out.write(_t("Next interval"));
                 _out.write("</a> ");
             }
 
             _out.write("<br>");
             _out.write(link(_stat, !_showEvents, _periodCount, _end, _width, _height));
             if (!_stat.equals("bw.combined"))
-                _out.write(_showEvents ? _("Plot averages") : _("plot events"));
+                _out.write(_showEvents ? _t("Plot averages") : _t("plot events"));
             _out.write("</a>");
 
-            _out.write("</p><p><i>" + _("All times are UTC.") + "</i></p>\n");
+            _out.write("</p><p><i>" + _t("All times are UTC.") + "</i></p>\n");
         } catch (IOException ioe) {
             ioe.printStackTrace();
         }
@@ -353,17 +353,17 @@ public class GraphHelper extends FormHandler {
         // So just use the "shared/console nonce".
         String nonce = CSSHelper.getNonce();
         try {
-            _out.write("<br><h3>" + _("Configure Graph Display") + " [<a href=\"configstats\">" + _("Select Stats") + "</a>]</h3>");
+            _out.write("<br><h3>" + _t("Configure Graph Display") + " [<a href=\"configstats\">" + _t("Select Stats") + "</a>]</h3>");
             _out.write("<form action=\"graphs\" method=\"POST\">\n" +
                        "<input type=\"hidden\" name=\"action\" value=\"save\">\n" +
                        "<input type=\"hidden\" name=\"nonce\" value=\"" + nonce + "\" >\n");
-            _out.write(_("Periods") + ": <input size=\"5\" style=\"text-align: right;\" type=\"text\" name=\"periodCount\" value=\"" + _periodCount + "\"><br>\n");
-            _out.write(_("Plot averages") + ": <input type=\"radio\" class=\"optbox\" name=\"showEvents\" value=\"false\" " + (_showEvents ? "" : "checked=\"checked\" ") + "> ");
-            _out.write(_("or")+ " " +_("plot events") + ": <input type=\"radio\" class=\"optbox\" name=\"showEvents\" value=\"true\" "+ (_showEvents ? "checked=\"checked\" " : "") + "><br>\n");
-            _out.write(_("Image sizes") + ": " + _("width") + ": <input size=\"4\" style=\"text-align: right;\" type=\"text\" name=\"width\" value=\"" + _width 
-                       + "\"> " + _("pixels") + ", " + _("height") + ": <input size=\"4\" style=\"text-align: right;\" type=\"text\" name=\"height\" value=\"" + _height  
-                       + "\"> " + _("pixels") + "<br>\n");
-            _out.write(_("Refresh delay") + ": <select name=\"refreshDelay\">");
+            _out.write(_t("Periods") + ": <input size=\"5\" style=\"text-align: right;\" type=\"text\" name=\"periodCount\" value=\"" + _periodCount + "\"><br>\n");
+            _out.write(_t("Plot averages") + ": <input type=\"radio\" class=\"optbox\" name=\"showEvents\" value=\"false\" " + (_showEvents ? "" : "checked=\"checked\" ") + "> ");
+            _out.write(_t("or")+ " " +_t("plot events") + ": <input type=\"radio\" class=\"optbox\" name=\"showEvents\" value=\"true\" "+ (_showEvents ? "checked=\"checked\" " : "") + "><br>\n");
+            _out.write(_t("Image sizes") + ": " + _t("width") + ": <input size=\"4\" style=\"text-align: right;\" type=\"text\" name=\"width\" value=\"" + _width 
+                       + "\"> " + _t("pixels") + ", " + _t("height") + ": <input size=\"4\" style=\"text-align: right;\" type=\"text\" name=\"height\" value=\"" + _height  
+                       + "\"> " + _t("pixels") + "<br>\n");
+            _out.write(_t("Refresh delay") + ": <select name=\"refreshDelay\">");
             for (int i = 0; i < times.length; i++) {
                 _out.write("<option value=\"");
                 _out.write(Integer.toString(times[i]));
@@ -374,17 +374,17 @@ public class GraphHelper extends FormHandler {
                 if (times[i] > 0)
                     _out.write(DataHelper.formatDuration2(times[i] * 1000));
                 else
-                    _out.write(_("Never"));
+                    _out.write(_t("Never"));
                 _out.write("</option>\n");
             }
             _out.write("</select><br>\n" +
-                       _("Store graph data on disk?") +
+                       _t("Store graph data on disk?") +
                        " <input type=\"checkbox\" class=\"optbox\" value=\"true\" name=\"persistent\"");
             boolean persistent = _context.getBooleanPropertyDefaultTrue(SummaryListener.PROP_PERSISTENT);
             if (persistent)
                 _out.write(" checked=\"checked\"");
             _out.write(">" +
-                       "<hr><div class=\"formaction\"><input type=\"submit\" class=\"accept\" value=\"" + _("Save settings and redraw graphs") + "\"></div></form>");
+                       "<hr><div class=\"formaction\"><input type=\"submit\" class=\"accept\" value=\"" + _t("Save settings and redraw graphs") + "\"></div></form>");
         } catch (IOException ioe) {
             ioe.printStackTrace();
         }
@@ -440,7 +440,7 @@ public class GraphHelper extends FormHandler {
             changes.put(PROP_EVENTS, "" + _showEvents);
             changes.put(SummaryListener.PROP_PERSISTENT, "" + _persistent);
             _context.router().saveConfig(changes, null);
-            addFormNotice(_("Graph settings saved"));
+            addFormNotice(_t("Graph settings saved"));
         }
     }
 
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 ff0dc80592..1c14848dcf 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/HelperBase.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/HelperBase.java
@@ -44,28 +44,28 @@ public abstract class HelperBase {
     public void storeWriter(Writer out) { _out = out; }
 
     /** translate a string */
-    public String _(String s) {
+    public String _t(String s) {
         return Messages.getString(s, _context);
     }
 
     /**
      *  translate a string with a parameter
-     *  This is a lot more expensive than _(s), so use sparingly.
+     *  This is a lot more expensive than _t(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"))
+     *    To tranlslate parameter also, use _t("foo {0} bar", _t("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) {
+    public String _t(String s, Object o) {
         return Messages.getString(s, o, _context);
     }
 
     /** two params @since 0.7.14 */
-    public String _(String s, Object o, Object o2) {
+    public String _t(String s, Object o, Object o2) {
         return Messages.getString(s, o, o2, _context);
     }
 
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/HomeHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/HomeHelper.java
index 8f2b482666..d9a8de3011 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/HomeHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/HomeHelper.java
@@ -105,9 +105,9 @@ public class HomeHelper extends HelperBase {
     public String getProxyStatus() {
         int port = _context.portMapper().getPort(PortMapper.SVC_HTTP_PROXY);
         if (port <= 0)
-            return _("The HTTP proxy is not up");
+            return _t("The HTTP proxy is not up");
         return "<img src=\"http://console.i2p/onepixel.png?" + _context.random().nextInt() + "\"" +
-               " alt=\"" + _("Your browser is not properly configured to use the HTTP proxy at {0}",
+               " alt=\"" + _t("Your browser is not properly configured to use the HTTP proxy at {0}",
                              _context.getProperty(ConfigUpdateHandler.PROP_PROXY_HOST, ConfigUpdateHandler.DEFAULT_PROXY_HOST) + ':' + port) +
                "\">";
     }
@@ -168,7 +168,7 @@ public class HomeHelper extends HelperBase {
     }
 
     private String renderApps(Collection<App> apps) {
-        String website = _("Website");
+        String website = _t("Website");
         StringBuilder buf = new StringBuilder(1024);
         buf.append("<div class=\"appgroup\">");
         for (App app : apps) {
@@ -205,11 +205,11 @@ public class HomeHelper extends HelperBase {
     private String renderConfig(Collection<App> apps) {
         StringBuilder buf = new StringBuilder(1024);
         buf.append("<table><tr><th>")
-           .append(_("Remove"))
+           .append(_t("Remove"))
            .append("</th><th colspan=\"2\">")
-           .append(_("Name"))
+           .append(_t("Name"))
            .append("</th><th>")
-           .append(_("URL"))
+           .append(_t("URL"))
            .append("</th></tr>\n");
         for (App app : apps) {
             buf.append("<tr><td align=\"center\"><input type=\"checkbox\" class=\"optbox\" name=\"delete_")
@@ -232,7 +232,7 @@ public class HomeHelper extends HelperBase {
             buf.append("</a></td></tr>\n");
         }
         buf.append("<tr><td colspan=\"2\" align=\"center\"><b>")
-           .append(_("Add")).append(":</b>" +
+           .append(_t("Add")).append(":</b>" +
                    "</td><td align=\"left\"><input type=\"text\" name=\"nofilter_name\"></td>" +
                    "<td align=\"left\"><input type=\"text\" size=\"40\" name=\"nofilter_url\"></td></tr>");
         buf.append("</table>\n");
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/JobQueueHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/JobQueueHelper.java
index e6dc09a201..7bc28287fb 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/JobQueueHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/JobQueueHelper.java
@@ -47,29 +47,29 @@ public class JobQueueHelper extends HelperBase {
         int numRunners = _context.jobQueue().getJobs(readyJobs, timedJobs, activeJobs, justFinishedJobs);
         
         StringBuilder buf = new StringBuilder(32*1024);
-        buf.append("<b><div class=\"joblog\"><h3>").append(_("I2P Job Queue")).append("</h3><br><div class=\"wideload\">")
-           .append(_("Job runners")).append(": ").append(numRunners)
+        buf.append("<b><div class=\"joblog\"><h3>").append(_t("I2P Job Queue")).append("</h3><br><div class=\"wideload\">")
+           .append(_t("Job runners")).append(": ").append(numRunners)
            .append("</b><br>\n");
 
         long now = _context.clock().now();
 
-        buf.append("<hr><b>").append(_("Active jobs")).append(": ").append(activeJobs.size()).append("</b><ol>\n");
+        buf.append("<hr><b>").append(_t("Active jobs")).append(": ").append(activeJobs.size()).append("</b><ol>\n");
         for (int i = 0; i < activeJobs.size(); i++) {
             Job j = activeJobs.get(i);
-            buf.append("<li>(").append(_("started {0} ago", DataHelper.formatDuration2(now-j.getTiming().getStartAfter()))).append("): ");
+            buf.append("<li>(").append(_t("started {0} ago", DataHelper.formatDuration2(now-j.getTiming().getStartAfter()))).append("): ");
             buf.append(j.toString()).append("</li>\n");
         }
         buf.append("</ol>\n");
 
-        buf.append("<hr><b>").append(_("Just finished jobs")).append(": ").append(justFinishedJobs.size()).append("</b><ol>\n");
+        buf.append("<hr><b>").append(_t("Just finished jobs")).append(": ").append(justFinishedJobs.size()).append("</b><ol>\n");
         for (int i = 0; i < justFinishedJobs.size(); i++) {
             Job j = justFinishedJobs.get(i);
-            buf.append("<li>(").append(_("finished {0} ago", DataHelper.formatDuration2(now-j.getTiming().getActualEnd()))).append("): ");
+            buf.append("<li>(").append(_t("finished {0} ago", DataHelper.formatDuration2(now-j.getTiming().getActualEnd()))).append("): ");
             buf.append(j.toString()).append("</li>\n");
         }
         buf.append("</ol>\n");
 
-        buf.append("<hr><b>").append(_("Ready/waiting jobs")).append(": ").append(readyJobs.size()).append("</b><ol>\n");
+        buf.append("<hr><b>").append(_t("Ready/waiting jobs")).append(": ").append(readyJobs.size()).append("</b><ol>\n");
         ObjectCounter<String> counter = new ObjectCounter<String>();
         for (int i = 0; i < readyJobs.size(); i++) {
             Job j = readyJobs.get(i);
@@ -86,7 +86,7 @@ public class JobQueueHelper extends HelperBase {
         out.write(buf.toString());
         buf.setLength(0);
 
-        buf.append("<hr><b>").append(_("Scheduled jobs")).append(": ").append(timedJobs.size()).append("</b><ol>\n");
+        buf.append("<hr><b>").append(_t("Scheduled jobs")).append(": ").append(timedJobs.size()).append("</b><ol>\n");
         long prev = Long.MIN_VALUE;
         counter.clear();
         for (int i = 0; i < timedJobs.size(); i++) {
@@ -96,7 +96,7 @@ public class JobQueueHelper extends HelperBase {
                 continue;
             long time = j.getTiming().getStartAfter() - now;
             // translators: {0} is a job name, {1} is a time, e.g. 6 min
-            buf.append("<li>").append(_("{0} will start in {1}", j.getName(), DataHelper.formatDuration2(time)));
+            buf.append("<li>").append(_t("{0} will start in {1}", j.getName(), DataHelper.formatDuration2(time)));
             // debug, don't bother translating
             if (time < 0)
                 buf.append(" <b>DELAYED</b>");
@@ -110,7 +110,7 @@ public class JobQueueHelper extends HelperBase {
         out.write(buf.toString());
         buf.setLength(0);
         
-        buf.append("<hr><b>").append(_("Total Job Statistics")).append("</b>\n");
+        buf.append("<hr><b>").append(_t("Total Job Statistics")).append("</b>\n");
         getJobStats(buf);
         out.write(buf.toString());
     }
@@ -121,7 +121,7 @@ public class JobQueueHelper extends HelperBase {
         if (names.size() < 4)
             return;
         buf.append("<table style=\"width: 30%; margin-left: 100px;\">\n" +
-                   "<tr><th>").append(_("Job")).append("</th><th>").append(_("Queued")).append("<th>");
+                   "<tr><th>").append(_t("Job")).append("</th><th>").append(_t("Queued")).append("<th>");
         Collections.sort(names, new JobCountComparator(counter));
         for (String name : names) {
             buf.append("<tr><td>").append(name)
@@ -138,12 +138,12 @@ public class JobQueueHelper extends HelperBase {
      */
     private void getJobStats(StringBuilder buf) { 
         buf.append("<table>\n" +
-                   "<tr><th>").append(_("Job")).append("</th><th>").append(_("Runs")).append("</th>" +
-                   "<th>").append(_("Dropped")).append("</th>" +
-                   "<th>").append(_("Time")).append("</th><th><i>").append(_("Avg")).append("</i></th><th><i>")
-           .append(_("Max")).append("</i></th><th><i>").append(_("Min")).append("</i></th>" +
-                   "<th>").append(_("Pending")).append("</th><th><i>").append(_("Avg")).append("</i></th><th><i>")
-           .append(_("Max")).append("</i></th><th><i>").append(_("Min")).append("</i></th></tr>\n");
+                   "<tr><th>").append(_t("Job")).append("</th><th>").append(_t("Runs")).append("</th>" +
+                   "<th>").append(_t("Dropped")).append("</th>" +
+                   "<th>").append(_t("Time")).append("</th><th><i>").append(_t("Avg")).append("</i></th><th><i>")
+           .append(_t("Max")).append("</i></th><th><i>").append(_t("Min")).append("</i></th>" +
+                   "<th>").append(_t("Pending")).append("</th><th><i>").append(_t("Avg")).append("</i></th><th><i>")
+           .append(_t("Max")).append("</i></th><th><i>").append(_t("Min")).append("</i></th></tr>\n");
         long totRuns = 0;
         long totDropped = 0;
         long totExecTime = 0;
@@ -194,7 +194,7 @@ public class JobQueueHelper extends HelperBase {
         }
 
         buf.append("<tr class=\"tablefooter\">");
-        buf.append("<td><b>").append(_("Summary")).append("</b></td>");
+        buf.append("<td><b>").append(_t("Summary")).append("</b></td>");
         buf.append("<td align=\"right\">").append(totRuns).append("</td>");
         buf.append("<td align=\"right\">").append(totDropped).append("</td>");
         buf.append("<td align=\"right\">").append(DataHelper.formatDuration2(totExecTime)).append("</td>");
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/LogsHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/LogsHelper.java
index e3845df9da..dbed0c82e7 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/LogsHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/LogsHelper.java
@@ -46,7 +46,7 @@ public class LogsHelper extends HelperBase {
      */
     public String getLogs() {
         String str = formatMessages(_context.logManager().getBuffer().getMostRecentMessages());
-        return "<p>" + _("File location") + ": <b><code>" + _context.logManager().currentFile() + "</code></b></p>" + str;
+        return "<p>" + _t("File location") + ": <b><code>" + _context.logManager().currentFile() + "</code></b></p>" + str;
     }
     
     /**
@@ -97,10 +97,10 @@ public class LogsHelper extends HelperBase {
             str = FileUtil.readTextFile(f.getAbsolutePath(), 250, false);
         }
         if (str == null) {
-            return "<p>" + _("File not found") + ": <b><code>" + f.getAbsolutePath() + "</code></b></p>";
+            return "<p>" + _t("File not found") + ": <b><code>" + f.getAbsolutePath() + "</code></b></p>";
         } else {
             str = str.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;");
-            return "<p>" + _("File location") + ": <b><code>" + f.getAbsolutePath() + "</code></b></p><pre>" + str + "</pre>";
+            return "<p>" + _t("File location") + ": <b><code>" + f.getAbsolutePath() + "</code></b></p><pre>" + str + "</pre>";
         }
     }
     
@@ -115,7 +115,7 @@ public class LogsHelper extends HelperBase {
     /** formats in reverse order */
     private String formatMessages(List<String> msgs) {
         if (msgs.isEmpty())
-            return "<p><i>" + _("No log messages") + "</i></p>";
+            return "<p><i>" + _t("No log messages") + "</i></p>";
         boolean colorize = _context.getBooleanPropertyDefaultTrue("routerconsole.logs.color");
         StringBuilder buf = new StringBuilder(16*1024); 
         buf.append("<ul>");
@@ -138,13 +138,13 @@ public class LogsHelper extends HelperBase {
                 // Homeland Security Advisory System
                 // http://www.dhs.gov/xinfoshare/programs/Copy_of_press_release_0046.shtm
                 // but pink instead of yellow for WARN
-                if (msg.contains(_("CRIT")))
+                if (msg.contains(_t("CRIT")))
                     color = "#cc0000";
-                else if (msg.contains(_("ERROR")))
+                else if (msg.contains(_t("ERROR")))
                     color = "#ff3300";
-                else if (msg.contains(_("WARN")))
+                else if (msg.contains(_t("WARN")))
                     color = "#ff00cc";
-                else if (msg.contains(_("INFO")))
+                else if (msg.contains(_t("INFO")))
                     color = "#000099";
                 else
                     color = "#006600";
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 c76f260e8d..e138c0ffde 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/Messages.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/Messages.java
@@ -24,7 +24,7 @@ public class Messages extends Translate {
      *    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"))
+     *    To tranlslate parameter also, use _t("foo {0} bar", _t("baz"))
      *    Do not double the single quotes in the parameter.
      *    Use autoboxing to call with ints, longs, floats, etc.
      */
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/NetDbHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/NetDbHelper.java
index 496f49ac14..808297fb53 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/NetDbHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/NetDbHelper.java
@@ -125,12 +125,12 @@ public class NetDbHelper extends HelperBase {
                 // we are there
                 if (span)
                     buf.append("<span class=\"tab2\">");
-                buf.append(_(titles[i]));
+                buf.append(_t(titles[i]));
             } else {
                 // we are not there, make a link
                 if (span)
                     buf.append("<span class=\"tab\">");
-                buf.append("<a href=\"netdb").append(links[i]).append("\">").append(_(titles[i])).append("</a>");
+                buf.append("<a href=\"netdb").append(links[i]).append("\">").append(_t(titles[i])).append("</a>");
             }
             if (span)
                 buf.append(" </span>\n");
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java
index 89b4a7000e..e0340f68a0 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java
@@ -102,14 +102,14 @@ public class NetDbRenderer {
                 }
             }
             if (notFound) {
-                buf.append(_("Router")).append(' ');
+                buf.append(_t("Router")).append(' ');
                 if (routerPrefix != null)
                     buf.append(routerPrefix);
                 else if (version != null)
                     buf.append(version);
                 else if (country != null)
                     buf.append(country);
-                buf.append(' ').append(_("not found in network database"));
+                buf.append(' ').append(_t("not found in network database"));
             }
         }
         out.write(buf.toString());
@@ -153,12 +153,12 @@ public class NetDbRenderer {
         for (LeaseSet ls : leases) {
             Destination dest = ls.getDestination();
             Hash key = dest.calculateHash();
-            buf.append("<b>").append(_("LeaseSet")).append(": ").append(key.toBase64()).append("</b>\n");
+            buf.append("<b>").append(_t("LeaseSet")).append(": ").append(key.toBase64()).append("</b>\n");
             if (_context.clientManager().isLocal(dest)) {
-                buf.append(" (<a href=\"tunnels#" + key.toBase64().substring(0,4) + "\">" + _("Local") + "</a> ");
+                buf.append(" (<a href=\"tunnels#" + key.toBase64().substring(0,4) + "\">" + _t("Local") + "</a> ");
                 if (! _context.clientManager().shouldPublishLeaseSet(key))
-                    buf.append(_("Unpublished") + ' ');
-                buf.append(_("Destination") + ' ');
+                    buf.append(_t("Unpublished") + ' ');
+                buf.append(_t("Destination") + ' ');
                 TunnelPoolSettings in = _context.tunnelManager().getInboundSettings(key);
                 if (in != null && in.getDestinationNickname() != null)
                     buf.append(in.getDestinationNickname());
@@ -170,10 +170,10 @@ public class NetDbRenderer {
                 String host = _context.namingService().reverseLookup(dest);
                 if (host == null) {
                     buf.append("<a href=\"/susidns/addressbook.jsp?book=private&amp;destination=")
-                       .append(dest.toBase64()).append("#add\">").append(_("Add to local addressbook")).append("</a><br>\n");    
+                       .append(dest.toBase64()).append("#add\">").append(_t("Add to local addressbook")).append("</a><br>\n");    
                 }
             } else {
-                buf.append(" (").append(_("Destination")).append(' ');
+                buf.append(" (").append(_t("Destination")).append(' ');
                 String host = _context.namingService().reverseLookup(dest);
                 if (host != null) {
                     buf.append("<a href=\"http://").append(host).append("/\">").append(host).append("</a>)<br>\n");
@@ -182,14 +182,14 @@ public class NetDbRenderer {
                     buf.append(dest.toBase64().substring(0, 6)).append(")<br>\n" +
                                "<a href=\"http://").append(b32).append("\">").append(b32).append("</a><br>\n" +
                                "<a href=\"/susidns/addressbook.jsp?book=private&amp;destination=")
-                       .append(dest.toBase64()).append("#add\">").append(_("Add to local addressbook")).append("</a><br>\n");    
+                       .append(dest.toBase64()).append("#add\">").append(_t("Add to local addressbook")).append("</a><br>\n");    
                 }
             }
             long exp = ls.getLatestLeaseDate()-now;
             if (exp > 0)
-                buf.append(_("Expires in {0}", DataHelper.formatDuration2(exp)));
+                buf.append(_t("Expires in {0}", DataHelper.formatDuration2(exp)));
             else
-                buf.append(_("Expired {0} ago", DataHelper.formatDuration2(0-exp)));
+                buf.append(_t("Expired {0} ago", DataHelper.formatDuration2(0-exp)));
             buf.append("<br>\n");
             if (debug) {
                 buf.append("RAP? " + ls.getReceivedAsPublished());
@@ -208,15 +208,15 @@ public class NetDbRenderer {
             }
             for (int i = 0; i < ls.getLeaseCount(); i++) {
                 Lease lease = ls.getLease(i);
-                buf.append(_("Lease")).append(' ').append(i + 1).append(": ").append(_("Gateway")).append(' ');
+                buf.append(_t("Lease")).append(' ').append(i + 1).append(": ").append(_t("Gateway")).append(' ');
                 buf.append(_context.commSystem().renderPeerHTML(lease.getGateway()));
-                buf.append(' ').append(_("Tunnel")).append(' ').append(lease.getTunnelId().getTunnelId()).append(' ');
+                buf.append(' ').append(_t("Tunnel")).append(' ').append(lease.getTunnelId().getTunnelId()).append(' ');
                 if (debug) {
                     long exl = lease.getEndDate().getTime() - now;
                     if (exl > 0)
-                        buf.append(_("Expires in {0}", DataHelper.formatDuration2(exl)));
+                        buf.append(_t("Expires in {0}", DataHelper.formatDuration2(exl)));
                     else
-                        buf.append(_("Expired {0} ago", DataHelper.formatDuration2(0-exl)));
+                        buf.append(_t("Expired {0} ago", DataHelper.formatDuration2(0-exl)));
                 }
                 buf.append("<br>\n");
             }
@@ -277,7 +277,7 @@ public class NetDbRenderer {
      */
     public void renderStatusHTML(Writer out, int mode) throws IOException {
         if (!_context.netDb().isInitialized()) {
-            out.write(_("Not initialized"));
+            out.write(_t("Not initialized"));
             out.flush();
             return;
         }
@@ -327,14 +327,14 @@ public class NetDbRenderer {
 
         // the summary table
         buf.append("<table border=\"0\" cellspacing=\"30\"><tr><th colspan=\"3\">")
-           .append(_("Network Database Router Statistics"))
+           .append(_t("Network Database Router Statistics"))
            .append("</th></tr><tr><td style=\"vertical-align: top;\">");
         // versions table
         List<String> versionList = new ArrayList<String>(versions.objects());
         if (!versionList.isEmpty()) {
             Collections.sort(versionList, Collections.reverseOrder(new VersionComparator()));
             buf.append("<table>\n");
-            buf.append("<tr><th>" + _("Version") + "</th><th>" + _("Count") + "</th></tr>\n");
+            buf.append("<tr><th>" + _t("Version") + "</th><th>" + _t("Count") + "</th></tr>\n");
             for (String routerVersion : versionList) {
                 int num = versions.count(routerVersion);
                 String ver = DataHelper.stripHTML(routerVersion);
@@ -349,11 +349,11 @@ public class NetDbRenderer {
             
         // transports table
         buf.append("<table>\n");
-        buf.append("<tr><th align=\"left\">" + _("Transports") + "</th><th>" + _("Count") + "</th></tr>\n");
+        buf.append("<tr><th align=\"left\">" + _t("Transports") + "</th><th>" + _t("Count") + "</th></tr>\n");
         for (int i = 0; i < TNAMES.length; i++) {
             int num = transportCount[i];
             if (num > 0) {
-                buf.append("<tr><td>").append(_(TNAMES[i]));
+                buf.append("<tr><td>").append(_t(TNAMES[i]));
                 buf.append("</td><td align=\"center\">").append(num).append("</td></tr>\n");
             }
         }
@@ -367,7 +367,7 @@ public class NetDbRenderer {
         if (!countryList.isEmpty()) {
             Collections.sort(countryList, new CountryComparator());
             buf.append("<table>\n");
-            buf.append("<tr><th align=\"left\">" + _("Country") + "</th><th>" + _("Count") + "</th></tr>\n");
+            buf.append("<tr><th align=\"left\">" + _t("Country") + "</th><th>" + _t("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(Locale.US)).append("\"");
@@ -426,29 +426,29 @@ 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>" + _t("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>" + _t("Peer info for") + ":</b> ").append(hash).append("\n");
             if (!full) {
-                buf.append("[<a href=\"netdb?r=").append(hash.substring(0, 6)).append("\" >").append(_("Full entry")).append("</a>]");
+                buf.append("[<a href=\"netdb?r=").append(hash.substring(0, 6)).append("\" >").append(_t("Full entry")).append("</a>]");
             }
             buf.append("</th></tr><tr><td>\n");
         }
         
         long age = _context.clock().now() - info.getPublished();
         if (isUs && _context.router().isHidden()) {
-            buf.append("<b>").append(_("Hidden")).append(", ").append(_("Updated")).append(":</b> ")
-               .append(_("{0} ago", DataHelper.formatDuration2(age))).append("<br>\n");
+            buf.append("<b>").append(_t("Hidden")).append(", ").append(_t("Updated")).append(":</b> ")
+               .append(_t("{0} ago", DataHelper.formatDuration2(age))).append("<br>\n");
         } else if (age > 0) {
-            buf.append("<b>").append(_("Published")).append(":</b> ")
-               .append(_("{0} ago", DataHelper.formatDuration2(age))).append("<br>\n");
+            buf.append("<b>").append(_t("Published")).append(":</b> ")
+               .append(_t("{0} ago", DataHelper.formatDuration2(age))).append("<br>\n");
         } else {
             // shouldnt happen
-            buf.append("<b>" + _("Published") + ":</b> in ").append(DataHelper.formatDuration2(0-age)).append("???<br>\n");
+            buf.append("<b>" + _t("Published") + ":</b> in ").append(DataHelper.formatDuration2(0-age)).append("???<br>\n");
         }
-        buf.append("<b>").append(_("Signing Key")).append(":</b> ")
+        buf.append("<b>").append(_t("Signing Key")).append(":</b> ")
            .append(info.getIdentity().getSigningPublicKey().getType().toString());
-        buf.append("<br>\n<b>" + _("Address(es)") + ":</b> ");
+        buf.append("<br>\n<b>" + _t("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(Locale.US)).append('\"');
@@ -460,17 +460,17 @@ public class NetDbRenderer {
             buf.append("<b>").append(DataHelper.stripHTML(style)).append(":</b> ");
             int cost = addr.getCost();
             if (!((style.equals("SSU") && cost == 5) || (style.equals("NTCP") && cost == 10)))
-                buf.append('[').append(_("cost")).append('=').append("" + cost).append("] ");
+                buf.append('[').append(_t("cost")).append('=').append("" + cost).append("] ");
             Map<Object, Object> p = addr.getOptionsMap();
             for (Map.Entry<Object, Object> e : p.entrySet()) {
                 String name = (String) e.getKey();
                 String val = (String) e.getValue();
-                buf.append('[').append(_(DataHelper.stripHTML(name))).append('=').append(DataHelper.stripHTML(val)).append("] ");
+                buf.append('[').append(_t(DataHelper.stripHTML(name))).append('=').append(DataHelper.stripHTML(val)).append("] ");
             }
         }
         buf.append("</td></tr>\n");
         if (full) {
-            buf.append("<tr><td>" + _("Stats") + ": <br><code>");
+            buf.append("<tr><td>" + _t("Stats") + ": <br><code>");
             Map<Object, Object> p = info.getOptionsMap();
             for (Map.Entry<Object, Object> e : p.entrySet()) {
                 String key = (String) e.getKey();
@@ -514,7 +514,7 @@ public class NetDbRenderer {
     }
 
     /** translate a string */
-    private String _(String s) {
+    private String _t(String s) {
         return Messages.getString(s, _context);
     }
 
@@ -525,17 +525,17 @@ public class NetDbRenderer {
 
     /**
      *  translate a string with a parameter
-     *  This is a lot more expensive than _(s), so use sparingly.
+     *  This is a lot more expensive than _t(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"))
+     *    To tranlslate parameter also, use _t("foo {0} bar", _t("baz"))
      *    Do not double the single quotes in the parameter.
      *    Use autoboxing to call with ints, longs, floats, etc.
      */
-    private String _(String s, Object o) {
+    private String _t(String s, Object o) {
         return Messages.getString(s, o, _context);
     }
 }
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 ef70b170ae..2cb7e311f2 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ProfileOrganizerRenderer.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ProfileOrganizerRenderer.java
@@ -75,7 +75,7 @@ class ProfileOrganizerRenderer {
       ////
       if (mode < 2) {
 
-        //buf.append("<h2>").append(_("Peer Profiles")).append("</h2>\n<p>");
+        //buf.append("<h2>").append(_t("Peer Profiles")).append("</h2>\n<p>");
         buf.append(ngettext("Showing 1 recent profile.", "Showing {0} recent profiles.", order.size())).append('\n');
         if (older > 0)
             buf.append(ngettext("Hiding 1 older profile.", "Hiding {0} older profiles.", older)).append('\n');
@@ -84,12 +84,12 @@ class ProfileOrganizerRenderer {
         buf.append("</p>");
                    buf.append("<table>");
                    buf.append("<tr>");
-                   buf.append("<th>").append(_("Peer")).append("</th>");
-                   buf.append("<th>").append(_("Groups (Caps)")).append("</th>");
-                   buf.append("<th>").append(_("Speed")).append("</th>");
-                   buf.append("<th>").append(_("Capacity")).append("</th>");
-                   buf.append("<th>").append(_("Integration")).append("</th>");
-                   buf.append("<th>").append(_("Status")).append("</th>");
+                   buf.append("<th>").append(_t("Peer")).append("</th>");
+                   buf.append("<th>").append(_t("Groups (Caps)")).append("</th>");
+                   buf.append("<th>").append(_t("Speed")).append("</th>");
+                   buf.append("<th>").append(_t("Capacity")).append("</th>");
+                   buf.append("<th>").append(_t("Integration")).append("</th>");
+                   buf.append("<th>").append(_t("Status")).append("</th>");
                    buf.append("<th>&nbsp;</th>");
                    buf.append("</tr>");
         int prevTier = 1;
@@ -127,12 +127,12 @@ class ProfileOrganizerRenderer {
             buf.append("</td><td align=\"center\">");
             
             switch (tier) {
-                case 1: buf.append(_("Fast, High Capacity")); break;
-                case 2: buf.append(_("High Capacity")); break;
-                case 3: buf.append(_("Standard")); break;
-                default: buf.append(_("Failing")); break;
+                case 1: buf.append(_t("Fast, High Capacity")); break;
+                case 2: buf.append(_t("High Capacity")); break;
+                case 3: buf.append(_t("Standard")); break;
+                default: buf.append(_t("Failing")); break;
             }
-            if (isIntegrated) buf.append(", ").append(_("Integrated"));
+            if (isIntegrated) buf.append(", ").append(_t("Integrated"));
             RouterInfo info = _context.netDb().lookupRouterInfoLocally(peer);
             if (info != null) {
                 // prevent HTML injection in the caps and version
@@ -163,9 +163,9 @@ class ProfileOrganizerRenderer {
             }
             buf.append("</td><td align=\"right\">").append(num(prof.getIntegrationValue()));
             buf.append("</td><td align=\"center\">");
-            if (_context.banlist().isBanlisted(peer)) buf.append(_("Banned"));
-            if (prof.getIsFailing()) buf.append(' ').append(_("Failing"));
-            if (_context.commSystem().wasUnreachable(peer)) buf.append(' ').append(_("Unreachable"));
+            if (_context.banlist().isBanlisted(peer)) buf.append(_t("Banned"));
+            if (prof.getIsFailing()) buf.append(' ').append(_t("Failing"));
+            if (_context.commSystem().wasUnreachable(peer)) buf.append(' ').append(_t("Unreachable"));
             RateAverages ra = RateAverages.getTemp();
             Rate failed = prof.getTunnelHistory().getFailedRate().getRate(30*60*1000);
             long fails = failed.computeAverages(ra, false).getTotalEventCount();
@@ -173,13 +173,13 @@ class ProfileOrganizerRenderer {
                 Rate accepted = prof.getTunnelCreateResponseTime().getRate(30*60*1000);
                 long total = fails + accepted.computeAverages(ra, false).getTotalEventCount();
                 if (total / fails <= 10)   // hide if < 10%
-                    buf.append(' ').append(fails).append('/').append(total).append(' ').append(_("Test Fails"));
+                    buf.append(' ').append(fails).append('/').append(total).append(' ').append(_t("Test Fails"));
             }
             buf.append("&nbsp;</td>");
             //buf.append("<td nowrap align=\"center\"><a target=\"_blank\" href=\"dumpprofile.jsp?peer=")
-            //   .append(peer.toBase64().substring(0,6)).append("\">").append(_("profile")).append("</a>");
+            //   .append(peer.toBase64().substring(0,6)).append("\">").append(_t("profile")).append("</a>");
             buf.append("<td nowrap align=\"center\"><a href=\"viewprofile?peer=")
-               .append(peer.toBase64()).append("\">").append(_("profile")).append("</a>");
+               .append(peer.toBase64()).append("\">").append(_t("profile")).append("</a>");
             buf.append("&nbsp;<a href=\"configpeer?peer=").append(peer.toBase64()).append("\">+-</a></td>\n");
             buf.append("</tr>");
             // let's not build the whole page in memory (~500 bytes per peer)
@@ -193,26 +193,26 @@ class ProfileOrganizerRenderer {
       ////
       } else {
 
-        //buf.append("<h2><a name=\"flood\"></a>").append(_("Floodfill and Integrated Peers"))
+        //buf.append("<h2><a name=\"flood\"></a>").append(_t("Floodfill and Integrated Peers"))
         //   .append(" (").append(integratedPeers.size()).append(")</h2>\n");
         buf.append("<table>");
         buf.append("<tr>");
-        buf.append("<th class=\"smallhead\">").append(_("Peer")).append("</th>");
-        buf.append("<th class=\"smallhead\">").append(_("Caps")).append("</th>");
-        buf.append("<th class=\"smallhead\">").append(_("Integ. Value")).append("</th>");
-        buf.append("<th class=\"smallhead\">").append(_("Last Heard About")).append("</th>");
-        buf.append("<th class=\"smallhead\">").append(_("Last Heard From")).append("</th>");
-        buf.append("<th class=\"smallhead\">").append(_("Last Good Send")).append("</th>");        
-        buf.append("<th class=\"smallhead\">").append(_("Last Bad Send")).append("</th>");
-        buf.append("<th class=\"smallhead\">").append(_("10m Resp. Time")).append("</th>");
-        buf.append("<th class=\"smallhead\">").append(_("1h Resp. Time")).append("</th>");
-        buf.append("<th class=\"smallhead\">").append(_("1d Resp. Time")).append("</th>");
-        buf.append("<th class=\"smallhead\">").append(_("Last Good Lookup")).append("</th>"); 
-        buf.append("<th class=\"smallhead\">").append(_("Last Bad Lookup")).append("</th>");        
-        buf.append("<th class=\"smallhead\">").append(_("Last Good Store")).append("</th>");
-        buf.append("<th class=\"smallhead\">").append(_("Last Bad Store")).append("</th>");
-        buf.append("<th class=\"smallhead\">").append(_("1h Fail Rate")).append("</th>");
-        buf.append("<th class=\"smallhead\">").append(_("1d Fail Rate")).append("</th>");
+        buf.append("<th class=\"smallhead\">").append(_t("Peer")).append("</th>");
+        buf.append("<th class=\"smallhead\">").append(_t("Caps")).append("</th>");
+        buf.append("<th class=\"smallhead\">").append(_t("Integ. Value")).append("</th>");
+        buf.append("<th class=\"smallhead\">").append(_t("Last Heard About")).append("</th>");
+        buf.append("<th class=\"smallhead\">").append(_t("Last Heard From")).append("</th>");
+        buf.append("<th class=\"smallhead\">").append(_t("Last Good Send")).append("</th>");        
+        buf.append("<th class=\"smallhead\">").append(_t("Last Bad Send")).append("</th>");
+        buf.append("<th class=\"smallhead\">").append(_t("10m Resp. Time")).append("</th>");
+        buf.append("<th class=\"smallhead\">").append(_t("1h Resp. Time")).append("</th>");
+        buf.append("<th class=\"smallhead\">").append(_t("1d Resp. Time")).append("</th>");
+        buf.append("<th class=\"smallhead\">").append(_t("Last Good Lookup")).append("</th>"); 
+        buf.append("<th class=\"smallhead\">").append(_t("Last Bad Lookup")).append("</th>");        
+        buf.append("<th class=\"smallhead\">").append(_t("Last Good Store")).append("</th>");
+        buf.append("<th class=\"smallhead\">").append(_t("Last Bad Store")).append("</th>");
+        buf.append("<th class=\"smallhead\">").append(_t("1h Fail Rate")).append("</th>");
+        buf.append("<th class=\"smallhead\">").append(_t("1d Fail Rate")).append("</th>");
         buf.append("</tr>");
         RateAverages ra = RateAverages.getTemp();
         for (PeerProfile prof : order) {
@@ -244,7 +244,7 @@ class ProfileOrganizerRenderer {
                 buf.append("<td align=\"right\">").append(davg(dbh, 24*60*60*1000l, ra)).append("</td>");
             } else {
                 for (int i = 0; i < 6; i++)
-                    buf.append("<td align=\"right\">").append(_(NA));
+                    buf.append("<td align=\"right\">").append(_t(NA));
             }
             buf.append("</tr>\n");
         }
@@ -256,20 +256,20 @@ class ProfileOrganizerRenderer {
       }
       if (mode < 2) {
 
-        buf.append("<h3>").append(_("Thresholds")).append("</h3>");
-        buf.append("<p><b>").append(_("Speed")).append(":</b> ").append(num(_organizer.getSpeedThreshold()))
-           .append(" (").append(fast).append(' ').append(_("fast peers")).append(")<br>");
-        buf.append("<b>").append(_("Capacity")).append(":</b> ").append(num(_organizer.getCapacityThreshold()))
-           .append(" (").append(reliable).append(' ').append(_("high capacity peers")).append(")<br>");
-        buf.append("<b>").append(_("Integration")).append(":</b> ").append(num(_organizer.getIntegrationThreshold()))
-           .append(" (").append(integrated).append(' ').append(_(" well integrated peers")).append(")</p>");
-        buf.append("<h3>").append(_("Definitions")).append("</h3><ul>");
-        buf.append("<li><b>").append(_("groups")).append("</b>: ").append(_("as determined by the profile organizer")).append("</li>");
-        buf.append("<li><b>").append(_("caps")).append("</b>: ").append(_("capabilities in the netDb, not used to determine profiles")).append("</li>");
-        buf.append("<li><b>").append(_("speed")).append("</b>: ").append(_("peak throughput (bytes per second) over a 1 minute period that the peer has sustained in a single tunnel")).append("</li>");
-        buf.append("<li><b>").append(_("capacity")).append("</b>: ").append(_("how many tunnels can we ask them to join in an hour?")).append("</li>");
-        buf.append("<li><b>").append(_("integration")).append("</b>: ").append(_("how many new peers have they told us about lately?")).append("</li>");
-        buf.append("<li><b>").append(_("status")).append("</b>: ").append(_("is the peer banned, or unreachable, or failing tunnel tests?")).append("</li>");
+        buf.append("<h3>").append(_t("Thresholds")).append("</h3>");
+        buf.append("<p><b>").append(_t("Speed")).append(":</b> ").append(num(_organizer.getSpeedThreshold()))
+           .append(" (").append(fast).append(' ').append(_t("fast peers")).append(")<br>");
+        buf.append("<b>").append(_t("Capacity")).append(":</b> ").append(num(_organizer.getCapacityThreshold()))
+           .append(" (").append(reliable).append(' ').append(_t("high capacity peers")).append(")<br>");
+        buf.append("<b>").append(_t("Integration")).append(":</b> ").append(num(_organizer.getIntegrationThreshold()))
+           .append(" (").append(integrated).append(' ').append(_t(" well integrated peers")).append(")</p>");
+        buf.append("<h3>").append(_t("Definitions")).append("</h3><ul>");
+        buf.append("<li><b>").append(_t("groups")).append("</b>: ").append(_t("as determined by the profile organizer")).append("</li>");
+        buf.append("<li><b>").append(_t("caps")).append("</b>: ").append(_t("capabilities in the netDb, not used to determine profiles")).append("</li>");
+        buf.append("<li><b>").append(_t("speed")).append("</b>: ").append(_t("peak throughput (bytes per second) over a 1 minute period that the peer has sustained in a single tunnel")).append("</li>");
+        buf.append("<li><b>").append(_t("capacity")).append("</b>: ").append(_t("how many tunnels can we ask them to join in an hour?")).append("</li>");
+        buf.append("<li><b>").append(_t("integration")).append("</b>: ").append(_t("how many new peers have they told us about lately?")).append("</li>");
+        buf.append("<li><b>").append(_t("status")).append("</b>: ").append(_t("is the peer banned, or unreachable, or failing tunnel tests?")).append("</li>");
         buf.append("</ul>");
 
       ////
@@ -336,13 +336,13 @@ class ProfileOrganizerRenderer {
     private String avg (PeerProfile prof, long rate, RateAverages ra) {
             RateStat rs = prof.getDbResponseTime();
             if (rs == null)
-                return _(NA);
+                return _t(NA);
             Rate r = rs.getRate(rate);
             if (r == null)
-                return _(NA);
+                return _t(NA);
             r.computeAverages(ra, false);
             if (ra.getTotalEventCount() == 0)
-                return _(NA);
+                return _t(NA);
             return DataHelper.formatDuration2(Math.round(ra.getAverage()));
     }
 
@@ -363,12 +363,12 @@ class ProfileOrganizerRenderer {
     /** @since 0.9.21 */
     private String formatInterval(long now, long then) {
         if (then <= 0)
-            return _(NA);
+            return _t(NA);
         return DataHelper.formatDuration2(now - then);
     }
 
     /** translate a string */
-    private String _(String s) {
+    private String _t(String s) {
         return Messages.getString(s, _context);
     }
 
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ProfilesHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/ProfilesHelper.java
index 6645558d5d..3236d1f126 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/ProfilesHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/ProfilesHelper.java
@@ -104,12 +104,12 @@ public class ProfilesHelper extends HelperBase {
                 // we are there
                 if (span)
                     buf.append("<span class=\"tab2\">");
-                buf.append(_(titles[i]));
+                buf.append(_t(titles[i]));
             } else {
                 // we are not there, make a link
                 if (span)
                     buf.append("<span class=\"tab\">");
-                buf.append("<a href=\"profiles").append(links[i]).append("\">").append(_(titles[i])).append("</a>");
+                buf.append("<a href=\"profiles").append(links[i]).append("\">").append(_t(titles[i])).append("</a>");
             }
             if (span)
                 buf.append(" </span>\n");
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/SearchHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/SearchHelper.java
index 3ee03289be..e04809d6f3 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/SearchHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/SearchHelper.java
@@ -71,7 +71,7 @@ public class SearchHelper extends HelperBase {
             }
         }
         StringBuilder buf = new StringBuilder(1024);
-        buf.append("<select name=\"engine\" title=\"").append(_("Select search engine")).append("\">");
+        buf.append("<select name=\"engine\" title=\"").append(_t("Select search engine")).append("\">");
         for (String name : _engines.keySet()) {
             buf.append("<option value=\"").append(name).append('\"');
             if (name.equals(dflt))
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/StatSummarizer.java b/apps/routerconsole/java/src/net/i2p/router/web/StatSummarizer.java
index 853bcbe81a..b55283b4cc 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/StatSummarizer.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/StatSummarizer.java
@@ -329,7 +329,7 @@ public class StatSummarizer implements Runnable {
         else if (height <= 0)
             height = GraphHelper.DEFAULT_Y;
         txLsnr.renderPng(out, width, height, hideLegend, hideGrid, hideTitle, showEvents, periodCount,
-                         end, showCredit, rxLsnr, _("Bandwidth usage"));
+                         end, showCredit, rxLsnr, _t("Bandwidth usage"));
         return true;
     }
     
@@ -375,7 +375,7 @@ public class StatSummarizer implements Runnable {
     private static final boolean IS_WIN = SystemVersion.isWindows();
 
     /** translate a string */
-    private String _(String s) {
+    private String _t(String s) {
         // the RRD font doesn't have zh chars, at least on my system
         // Works on 1.5.9 except on windows
         if (IS_WIN && "zh".equals(Messages.getLanguage(_context)))
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/StatsGenerator.java b/apps/routerconsole/java/src/net/i2p/router/web/StatsGenerator.java
index 80fca92985..634940edf5 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/StatsGenerator.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/StatsGenerator.java
@@ -40,7 +40,7 @@ public class StatsGenerator {
         groups.putAll(unsorted);
         for (String group : groups.keySet()) {
             buf.append("<option value=\"#").append(group).append("\">");
-            buf.append(_(group)).append("</option>\n");
+            buf.append(_t(group)).append("</option>\n");
             // let's just do the groups
             //Set stats = (Set)entry.getValue();
             //for (Iterator statIter = stats.iterator(); statIter.hasNext(); ) {
@@ -54,14 +54,14 @@ public class StatsGenerator {
             //out.write(buf.toString());
             //buf.setLength(0);
         }
-        buf.append("</select> <input type=\"submit\" value=\"").append(_("GO")).append("\" />");
+        buf.append("</select> <input type=\"submit\" value=\"").append(_t("GO")).append("\" />");
         buf.append("</form>");
         
-        buf.append(_("Statistics gathered during this router's uptime")).append(" (");
+        buf.append(_t("Statistics gathered during this router's uptime")).append(" (");
         long uptime = _context.router().getUptime();
         buf.append(DataHelper.formatDuration2(uptime));
-        buf.append(").  ").append( _("The data gathered is quantized over a 1 minute period, so should just be used as an estimate."));
-        buf.append(' ').append( _("These statistics are primarily used for development and debugging."));
+        buf.append(").  ").append( _t("The data gathered is quantized over a 1 minute period, so should just be used as an estimate."));
+        buf.append(' ').append( _t("These statistics are primarily used for development and debugging."));
 
         out.write(buf.toString());
         buf.setLength(0);
@@ -72,7 +72,7 @@ public class StatsGenerator {
             buf.append("<h3><a name=\"");
             buf.append(group);
             buf.append("\">");
-            buf.append(_(group));
+            buf.append(_t(group));
             buf.append("</a></h3>");
             buf.append("<ul>");
             out.write(buf.toString());
@@ -102,7 +102,7 @@ public class StatsGenerator {
         buf.append(freq.getDescription());
         buf.append("</i><br>");
         if (freq.getEventCount() <= 0) {
-            buf.append(_("No lifetime events")).append("<br>\n");
+            buf.append(_t("No lifetime events")).append("<br>\n");
             return;
         }
         long uptime = _context.router().getUptime();
@@ -113,15 +113,15 @@ public class StatsGenerator {
             if (periods[i] > uptime)
                 break;
             buf.append("<li>");
-            renderPeriod(buf, periods[i], _("frequency"));
+            renderPeriod(buf, periods[i], _t("frequency"));
             Frequency curFreq = freq.getFrequency(periods[i]);
             buf.append(DataHelper.formatDuration2(Math.round(curFreq.getAverageInterval())));
             buf.append("; ");
-            buf.append(_("Rolling average events per period"));
+            buf.append(_t("Rolling average events per period"));
             buf.append(": ");
             buf.append(num(curFreq.getAverageEventsPerPeriod()));
             buf.append("; ");
-            buf.append(_("Highest events per period"));
+            buf.append(_t("Highest events per period"));
             buf.append(": ");
             buf.append(num(curFreq.getMaxAverageEventsPerPeriod()));
             buf.append("; ");
@@ -132,12 +132,12 @@ public class StatsGenerator {
             //}
             //buf.append(" <i>avg interval between updates:</i> (").append(num(curFreq.getAverageInterval())).append("ms, min ");
             //buf.append(num(curFreq.getMinAverageInterval())).append("ms)");
-            buf.append(_("Lifetime average events per period")).append(": ");
+            buf.append(_t("Lifetime average events per period")).append(": ");
             buf.append(num(curFreq.getStrictAverageEventsPerPeriod()));
             buf.append("</li>\n");
         }
         // Display the strict average
-        buf.append("<li><b>").append(_("Lifetime average frequency")).append(":</b> ");
+        buf.append("<li><b>").append(_t("Lifetime average frequency")).append(":</b> ");
         buf.append(DataHelper.formatDuration2(freq.getFrequency()));
         buf.append(" (");
         buf.append(ngettext("1 event", "{0} events", (int) freq.getEventCount()));
@@ -153,7 +153,7 @@ public class StatsGenerator {
             buf.append("</i><br>");
         }
         if (rate.getLifetimeEventCount() <= 0) {
-            buf.append(_("No lifetime events")).append("<br>\n");
+            buf.append(_t("No lifetime events")).append("<br>\n");
             return;
         }
         long now = _context.clock().now();
@@ -165,12 +165,12 @@ public class StatsGenerator {
             if (curRate.getLastCoalesceDate() <= curRate.getCreationDate())
                 break;
             buf.append("<li>");
-            renderPeriod(buf, periods[i], _("rate"));
+            renderPeriod(buf, periods[i], _t("rate"));
             if (curRate.getLastEventCount() > 0) {
-                buf.append(_("Average")).append(": ");
+                buf.append(_t("Average")).append(": ");
                 buf.append(num(curRate.getAverageValue()));
                 buf.append("; ");
-                buf.append(_("Highest average"));
+                buf.append(_t("Highest average"));
                 buf.append(": ");
                 buf.append(num(curRate.getExtremeAverageValue()));
                 buf.append("; ");
@@ -199,16 +199,16 @@ public class StatsGenerator {
 
                 buf.append(ngettext("There was 1 event in this period.", "There were {0} events in this period.", (int)curRate.getLastEventCount()));
                 buf.append(' ');
-                buf.append(_("The period ended {0} ago.", DataHelper.formatDuration2(now - curRate.getLastCoalesceDate())));
+                buf.append(_t("The period ended {0} ago.", DataHelper.formatDuration2(now - curRate.getLastCoalesceDate())));
             } else {
-                buf.append(" <i>").append(_("No events")).append("</i> ");
+                buf.append(" <i>").append(_t("No events")).append("</i> ");
             }
             long numPeriods = curRate.getLifetimePeriods();
             if (numPeriods > 0) {
                 double avgFrequency = curRate.getLifetimeEventCount() / (double)numPeriods;
-                buf.append(" (").append(_("Average event count")).append(": ");
+                buf.append(" (").append(_t("Average event count")).append(": ");
                 buf.append(num(avgFrequency));
-                buf.append("; ").append(_("Events in peak period")).append(": ");
+                buf.append("; ").append(_t("Events in peak period")).append(": ");
                 // This isn't really the highest event count, but the event count during the period with the highest total value.
                 buf.append(curRate.getExtremeEventCount());
                 buf.append(")");
@@ -216,19 +216,19 @@ public class StatsGenerator {
             if (curRate.getSummaryListener() != null) {
                 buf.append(" <a href=\"graph?stat=").append(name)
                    .append('.').append(periods[i]);
-                buf.append("\">").append(_("Graph Data")).append("</a> - ");
+                buf.append("\">").append(_t("Graph Data")).append("</a> - ");
                 buf.append(" <a href=\"graph?stat=").append(name)
                    .append('.').append(periods[i]);
-                buf.append("&amp;showEvents=true\">").append(_("Graph Event Count")).append("</a>");
+                buf.append("&amp;showEvents=true\">").append(_t("Graph Event Count")).append("</a>");
                 // This can really blow up your browser if you click on it
                 //buf.append(" - <a href=\"viewstat.jsp?stat=").append(name);
                 //buf.append("&amp;period=").append(periods[i]);
-                //buf.append("&amp;format=xml\">").append(_("Export Data as XML")).append("</a>");
+                //buf.append("&amp;format=xml\">").append(_t("Export Data as XML")).append("</a>");
             }
             buf.append("</li>\n");
         }
         // Display the strict average
-        buf.append("<li><b>").append(_("Lifetime average value")).append(":</b> ");
+        buf.append("<li><b>").append(_t("Lifetime average value")).append(":</b> ");
         buf.append(num(rate.getLifetimeAverageValue()));
         buf.append(" (");
         buf.append(ngettext("1 event", "{0} events", (int) rate.getLifetimeEventCount()));
@@ -258,19 +258,19 @@ public class StatsGenerator {
      */
     private class AlphaComparator implements Comparator<String> {
         public int compare(String lhs, String rhs) {
-            String lname = _(lhs);
-            String rname = _(rhs);
+            String lname = _t(lhs);
+            String rname = _t(rhs);
             return Collator.getInstance().compare(lname, rname);
         }
     }
 
     /** translate a string */
-    private String _(String s) {
+    private String _t(String s) {
         return Messages.getString(s, _context);
     }
 
     /** translate a string */
-    private String _(String s, Object o) {
+    private String _t(String s, Object o) {
         return Messages.getString(s, o, _context);
     }
 
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java
index 9f79dbfc78..29223c7bf6 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java
@@ -124,9 +124,9 @@ public class SummaryBarRenderer {
     public String renderHelpAndFAQHTML() {
         StringBuilder buf = new StringBuilder(512);
         buf.append("<h3><a href=\"/help\" target=\"_top\" title=\"")
-           .append(_("I2P Router Help &amp; FAQ"))
+           .append(_t("I2P Router Help &amp; FAQ"))
            .append("\">")
-           .append(_("Help &amp; FAQ"))
+           .append(_t("Help &amp; FAQ"))
            .append("</a></h3>");
         return buf.toString();
     }
@@ -134,23 +134,23 @@ public class SummaryBarRenderer {
     public String renderI2PServicesHTML() {
         StringBuilder buf = new StringBuilder(512);
         buf.append("<h3><a href=\"/configclients\" target=\"_top\" title=\"")
-           .append(_("Configure startup of clients and webapps (services); manually start dormant services"))
+           .append(_t("Configure startup of clients and webapps (services); manually start dormant services"))
            .append("\">")
-           .append(_("I2P Services"))
+           .append(_t("I2P Services"))
            .append("</a></h3>\n" +
 
                    "<hr class=\"b\"><table><tr><td>" +
 
                    "<a href=\"/susimail/susimail\" target=\"_blank\" title=\"")
-           .append(_("Anonymous webmail client"))
+           .append(_t("Anonymous webmail client"))
            .append("\">")
-           .append(nbsp(_("Email")))
+           .append(nbsp(_t("Email")))
            .append("</a>\n" +
 
                    "<a href=\"/i2psnark/\" target=\"_blank\" title=\"")
-           .append(_("Built-in anonymous BitTorrent Client"))
+           .append(_t("Built-in anonymous BitTorrent Client"))
            .append("\">")
-           .append(nbsp(_("Torrents")))
+           .append(nbsp(_t("Torrents")))
            .append("</a>\n" +
 
                    "<a href=\"http://")
@@ -158,9 +158,9 @@ public class SummaryBarRenderer {
            .append(':')
            .append(_context.portMapper().getPort(PortMapper.SVC_EEPSITE, 7658))
            .append("/\" target=\"_blank\" title=\"")
-           .append(_("Local web server"))
+           .append(_t("Local web server"))
            .append("\">")
-           .append(nbsp(_("Website")))
+           .append(nbsp(_t("Website")))
            .append("</a>\n")
 
            .append(NavHelper.getClientAppLinks(_context))
@@ -172,73 +172,73 @@ public class SummaryBarRenderer {
     public String renderI2PInternalsHTML() {
         StringBuilder buf = new StringBuilder(512);
         buf.append("<h3><a href=\"/config\" target=\"_top\" title=\"")
-           .append(_("Configure I2P Router"))
+           .append(_t("Configure I2P Router"))
            .append("\">")
-           .append(_("I2P Internals"))
+           .append(_t("I2P Internals"))
            .append("</a></h3><hr class=\"b\">\n" +
 
                    "<table><tr><td>\n" +
 
                    "<a href=\"/tunnels\" target=\"_top\" title=\"")
-           .append(_("View existing tunnels and tunnel build status"))
+           .append(_t("View existing tunnels and tunnel build status"))
            .append("\">")
-           .append(nbsp(_("Tunnels")))
+           .append(nbsp(_t("Tunnels")))
            .append("</a>\n" +
 
                    "<a href=\"/peers\" target=\"_top\" title=\"")
-           .append(_("Show all current peer connections"))
+           .append(_t("Show all current peer connections"))
            .append("\">")
-           .append(nbsp(_("Peers")))
+           .append(nbsp(_t("Peers")))
            .append("</a>\n" +
 
                    "<a href=\"/profiles\" target=\"_top\" title=\"")
-           .append(_("Show recent peer performance profiles"))
+           .append(_t("Show recent peer performance profiles"))
            .append("\">")
-           .append(nbsp(_("Profiles")))
+           .append(nbsp(_t("Profiles")))
            .append("</a>\n" +
 
                    "<a href=\"/netdb\" target=\"_top\" title=\"")
-           .append(_("Show list of all known I2P routers"))
+           .append(_t("Show list of all known I2P routers"))
            .append("\">")
-           .append(nbsp(_("NetDB")))
+           .append(nbsp(_t("NetDB")))
            .append("</a>\n" +
 
                    "<a href=\"/logs\" target=\"_top\" title=\"")
-           .append(_("Health Report"))
+           .append(_t("Health Report"))
            .append("\">")
-           .append(nbsp(_("Logs")))
+           .append(nbsp(_t("Logs")))
            .append("</a>\n");
 
        //          "<a href=\"/jobs.jsp\" target=\"_top\" title=\"")
-       //  .append(_("Show the router's workload, and how it's performing"))
+       //  .append(_t("Show the router's workload, and how it's performing"))
        //  .append("\">")
-       //  .append(_("Jobs"))
+       //  .append(_t("Jobs"))
        //  .append("</a>\n" +
 
         if (!StatSummarizer.isDisabled()) {
             buf.append("<a href=\"/graphs\" target=\"_top\" title=\"")
-               .append(_("Graph router performance"))
+               .append(_t("Graph router performance"))
                .append("\">")
-               .append(nbsp(_("Graphs")))
+               .append(nbsp(_t("Graphs")))
                .append("</a>\n");
         }
 
         buf.append("<a href=\"/stats\" target=\"_top\" title=\"")
-           .append(_("Textual router performance statistics"))
+           .append(_t("Textual router performance statistics"))
            .append("\">")
-           .append(nbsp(_("Stats")))
+           .append(nbsp(_t("Stats")))
            .append("</a>\n" +
 
                    "<a href=\"/dns\" target=\"_top\" title=\"")
-           .append(_("Manage your I2P hosts file here (I2P domain name resolution)"))
+           .append(_t("Manage your I2P hosts file here (I2P domain name resolution)"))
            .append("\">")
-           .append(nbsp(_("Addressbook")))
+           .append(nbsp(_t("Addressbook")))
            .append("</a>\n" +
 
                     "<a href=\"/i2ptunnelmgr\" target=\"_top\" title=\"")
-           .append(_("Local Tunnels"))
+           .append(_t("Local Tunnels"))
            .append("\">")
-           .append(nbsp(_("Hidden Services Manager")))
+           .append(nbsp(_t("Hidden Services Manager")))
            .append("</a>\n");
 
         if (_context.getBooleanProperty(HelperBase.PROP_ADVANCED))
@@ -254,44 +254,44 @@ public class SummaryBarRenderer {
         if (_helper == null) return "";
         StringBuilder buf = new StringBuilder(512);
         buf.append("<h3><a href=\"/help\" target=\"_top\" title=\"")
-           .append(_("I2P Router Help"))
+           .append(_t("I2P Router Help"))
            .append("\">")
-           .append(_("General"))
+           .append(_t("General"))
            .append("</a></h3><hr class=\"b\">\n" +
 
                    "<table><tr>" +
                    "<td align=\"left\"><b title=\"")
-           .append(_("Your Local Identity is your unique I2P router identity, similar to an ip address but tailored to I2P. "))
-           .append(_("Never disclose this to anyone, as it can reveal your real world ip."))
+           .append(_t("Your Local Identity is your unique I2P router identity, similar to an ip address but tailored to I2P. "))
+           .append(_t("Never disclose this to anyone, as it can reveal your real world ip."))
            .append("\">")
-           .append(_("Local Identity"))
+           .append(_t("Local Identity"))
            .append(":</b></td>" +
                    "<td align=\"right\">" +
                    "<a title=\"")
-           .append(_("Your unique I2P router identity is"))
+           .append(_t("Your unique I2P router identity is"))
            .append(' ')
            .append(_helper.getIdent())
            .append(", ")
-           .append(_("never reveal it to anyone"))
+           .append(_t("never reveal it to anyone"))
            .append("\" href=\"/netdb?r=.\" target=\"_top\">")
-           .append(_("show"))
+           .append(_t("show"))
            .append("</a></td></tr>\n" +
 
                    "<tr title=\"")
-           .append(_("The version of the I2P software we are running"))
+           .append(_t("The version of the I2P software we are running"))
            .append("\">" +
                    "<td align=\"left\"><b>")
-           .append(_("Version"))
+           .append(_t("Version"))
            .append(":</b></td>" +
                    "<td align=\"right\">")
            .append(_helper.getVersion())
            .append("</td></tr>\n" +
 
                    "<tr title=\"")
-           .append(_("How long we've been running for this session"))
+           .append(_t("How long we've been running for this session"))
            .append("\">" +
                    "<td align=\"left\"><b>")
-           .append(_("Uptime"))
+           .append(_t("Uptime"))
            .append(":</b></td>" +
                    "<td align=\"right\">")
            .append(_helper.getUptime())
@@ -304,20 +304,20 @@ public class SummaryBarRenderer {
         StringBuilder buf = new StringBuilder(512);
         buf.append("<table>" +
                    "<tr title=\"")
-           .append(_("The version of the I2P software we are running"))
+           .append(_t("The version of the I2P software we are running"))
            .append("\">" +
                    "<td align=\"left\"><b>")
-           .append(_("Version"))
+           .append(_t("Version"))
            .append(":</b></td>" +
                    "<td align=\"right\">")
            .append(_helper.getVersion())
            .append("</td></tr>\n" +
 
                    "<tr title=\"")
-           .append(_("How long we've been running for this session"))
+           .append(_t("How long we've been running for this session"))
            .append("\">" +
                    "<td align=\"left\"><b>")
-           .append(_("Uptime"))
+           .append(_t("Uptime"))
            .append(":</b></td>" +
                    "<td align=\"right\">")
            .append(_helper.getUptime())
@@ -329,9 +329,9 @@ public class SummaryBarRenderer {
         if (_helper == null) return "";
         StringBuilder buf = new StringBuilder(512);
         buf.append("<h4><a href=\"/confignet#help\" target=\"_top\" title=\"")
-           .append(_("Help with configuring your firewall and router for optimal I2P performance"))
+           .append(_t("Help with configuring your firewall and router for optimal I2P performance"))
            .append("\">")
-           .append(_("Network"))
+           .append(_t("Network"))
            .append(": ")
            .append(_helper.getReachability())
            .append("</a></h4>\n");
@@ -340,9 +340,9 @@ public class SummaryBarRenderer {
             if ("ru".equals(Messages.getLanguage(_context)))
                 buf.append("-ru");
             buf.append("\" target=\"_top\" title=\"")
-               .append(_("See more information on the wiki"))
+               .append(_t("See more information on the wiki"))
                .append("\">")
-               .append(_("Warning: ECDSA is not available. Update your Java or OS"))
+               .append(_t("Warning: ECDSA is not available. Update your Java or OS"))
                .append("</a></h4>\n");
         }
         return buf.toString();
@@ -354,9 +354,9 @@ public class SummaryBarRenderer {
         if ("".equals(updateStatus)) return "";
         StringBuilder buf = new StringBuilder(512);
         buf.append("<h3><a href=\"/configupdate\" target=\"_top\" title=\"")
-           .append(_("Configure I2P Updates"))
+           .append(_t("Configure I2P Updates"))
            .append("\">")
-           .append(_("I2P Update"))
+           .append(_t("I2P Update"))
            .append("</a></h3><hr class=\"b\">\n");
         buf.append(updateStatus);
         return buf.toString();
@@ -373,18 +373,18 @@ public class SummaryBarRenderer {
         if (_helper == null) return "";
         StringBuilder buf = new StringBuilder(512);
         buf.append("<h3><a href=\"/peers\" target=\"_top\" title=\"")
-           .append(_("Show all current peer connections"))
+           .append(_t("Show all current peer connections"))
            .append("\">")
-           .append(_("Peers"))
+           .append(_t("Peers"))
            .append("</a></h3><hr class=\"b\">\n" +
 
                    "<table>\n" +
 
                    "<tr title=\"")
-           .append(_("Peers we've been talking to in the last few minutes/last hour"))
+           .append(_t("Peers we've been talking to in the last few minutes/last hour"))
            .append("\">" +
                    "<td align=\"left\"><b>")
-           .append(_("Active"))
+           .append(_t("Active"))
            .append(":</b></td><td align=\"right\">");
         int active = _helper.getActivePeers();
         buf.append(active)
@@ -393,37 +393,37 @@ public class SummaryBarRenderer {
            .append("</td></tr>\n" +
 
                    "<tr title=\"")
-           .append(_("The number of peers available for building client tunnels"))
+           .append(_t("The number of peers available for building client tunnels"))
            .append("\">" +
                    "<td align=\"left\"><b>")
-           .append(_("Fast"))
+           .append(_t("Fast"))
            .append(":</b></td><td align=\"right\">")
            .append(_helper.getFastPeers())
            .append("</td></tr>\n" +
 
                    "<tr title=\"")
-           .append(_("The number of peers available for building exploratory tunnels"))
+           .append(_t("The number of peers available for building exploratory tunnels"))
            .append("\">" +
                    "<td align=\"left\"><b>")
-           .append(_("High capacity"))
+           .append(_t("High capacity"))
            .append(":</b></td><td align=\"right\">")
            .append(_helper.getHighCapacityPeers())
            .append("</td></tr>\n" +
 
                    "<tr title=\"")
-           .append(_("The number of peers available for network database inquiries"))
+           .append(_t("The number of peers available for network database inquiries"))
            .append("\">" +
                    "<td align=\"left\"><b>")
-           .append(_("Integrated"))
+           .append(_t("Integrated"))
            .append(":</b></td><td align=\"right\">")
            .append(_helper.getWellIntegratedPeers())
            .append("</td></tr>\n" +
 
                    "<tr title=\"")
-           .append(_("The total number of peers in our network database"))
+           .append(_t("The total number of peers in our network database"))
            .append("\">" +
                    "<td align=\"left\"><b>")
-           .append(_("Known"))
+           .append(_t("Known"))
            .append(":</b></td><td align=\"right\">")
            .append(_helper.getAllPeers())
            .append("</td></tr>\n" +
@@ -443,9 +443,9 @@ public class SummaryBarRenderer {
         if (_helper == null) return "";
         StringBuilder buf = new StringBuilder(512);
         buf.append("<h3><a href=\"/config\" title=\"")
-           .append(_("Configure router bandwidth allocation"))
+           .append(_t("Configure router bandwidth allocation"))
            .append("\" target=\"_top\">")
-           .append(_("Bandwidth in/out"))
+           .append(_t("Bandwidth in/out"))
            .append("</a></h3><hr class=\"b\">" +
                    "<table>\n" +
 
@@ -465,14 +465,14 @@ public class SummaryBarRenderer {
 
         if (_context.router().getUptime() > 2*60*1000) {
             buf.append("<tr><td align=\"left\"><b>")
-           .append(_("Total"))
+           .append(_t("Total"))
            .append(":</b></td><td align=\"right\">")
            .append(_helper.getLifetimeKBps())
            .append("Bps</td></tr>\n");
         }
 
         buf.append("<tr><td align=\"left\"><b>")
-           .append(_("Used"))
+           .append(_t("Used"))
            .append(":</b></td><td align=\"right\">")
            .append(_helper.getInboundTransferred())
            .append(SummaryHelper.THINSP)
@@ -487,44 +487,44 @@ public class SummaryBarRenderer {
         if (_helper == null) return "";
         StringBuilder buf = new StringBuilder(512);
         buf.append("<h3><a href=\"/tunnels\" target=\"_top\" title=\"")
-           .append(_("View existing tunnels and tunnel build status"))
+           .append(_t("View existing tunnels and tunnel build status"))
            .append("\">")
-           .append(_("Tunnels"))
+           .append(_t("Tunnels"))
            .append("</a></h3><hr class=\"b\">" +
                    "<table>\n" +
 
                    "<tr title=\"")
-           .append(_("Used for building and testing tunnels, and communicating with floodfill peers"))
+           .append(_t("Used for building and testing tunnels, and communicating with floodfill peers"))
            .append("\">" +
                    "<td align=\"left\"><b>")
-           .append(_("Exploratory"))
+           .append(_t("Exploratory"))
            .append(":</b></td><td align=\"right\">")
            .append(_helper.getInboundTunnels() + _helper.getOutboundTunnels())
            .append("</td></tr>\n" +
 
                    "<tr title=\"")
-           .append(_("Tunnels we are using to provide or access services on the network"))
+           .append(_t("Tunnels we are using to provide or access services on the network"))
            .append("\">" +
                    "<td align=\"left\"><b>")
-           .append(_("Client"))
+           .append(_t("Client"))
            .append(":</b></td><td align=\"right\">")
            .append(_helper.getInboundClientTunnels() + _helper.getOutboundClientTunnels())
            .append("</td></tr>\n" +
 
                    "<tr title=\"")
-           .append(_("Tunnels we are participating in, directly contributing bandwidth to the network"))
+           .append(_t("Tunnels we are participating in, directly contributing bandwidth to the network"))
            .append("\">" +
                    "<td align=\"left\"><b>")
-           .append(_("Participating"))
+           .append(_t("Participating"))
            .append(":</b></td><td align=\"right\">")
            .append(_helper.getParticipatingTunnels())
            .append("</td></tr>\n" +
 
                    "<tr title=\"")
-           .append(_("The ratio of tunnel hops we provide to tunnel hops we use - a value greater than 1.00 indicates a positive contribution to the network"))
+           .append(_t("The ratio of tunnel hops we provide to tunnel hops we use - a value greater than 1.00 indicates a positive contribution to the network"))
            .append("\">" +
                    "<td align=\"left\"><b>")
-           .append(_("Share ratio"))
+           .append(_t("Share ratio"))
            .append(":</b></td><td align=\"right\">")
            .append(_helper.getShareRatio())
            .append("</td></tr>\n" +
@@ -537,46 +537,46 @@ public class SummaryBarRenderer {
         if (_helper == null) return "";
         StringBuilder buf = new StringBuilder(512);
         buf.append("<h3><a href=\"/jobs\" target=\"_top\" title=\"")
-           .append(_("What's in the router's job queue?"))
+           .append(_t("What's in the router's job queue?"))
            .append("\">")
-           .append(_("Congestion"))
+           .append(_t("Congestion"))
            .append("</a></h3><hr class=\"b\">" +
                    "<table>\n" +
 
                    "<tr title=\"")
-           .append(_("Indicates router performance"))
+           .append(_t("Indicates router performance"))
            .append("\">" +
                    "<td align=\"left\"><b>")
-           .append(_("Job lag"))
+           .append(_t("Job lag"))
            .append(":</b></td><td align=\"right\">")
            .append(_helper.getJobLag())
            .append("</td></tr>\n" +
 
                    "<tr title=\"")
-           .append(_("Indicates how quickly outbound messages to other I2P routers are sent"))
+           .append(_t("Indicates how quickly outbound messages to other I2P routers are sent"))
            .append("\">" +
                    "<td align=\"left\"><b>")
-           .append(_("Message delay"))
+           .append(_t("Message delay"))
            .append(":</b></td><td align=\"right\">")
            .append(_helper.getMessageDelay())
            .append("</td></tr>\n");
 
         if (!_context.getBooleanPropertyDefaultTrue("router.disableTunnelTesting")) {
             buf.append("<tr title=\"")
-           .append(_("Round trip time for a tunnel test"))
+           .append(_t("Round trip time for a tunnel test"))
            .append("\">" +
                    "<td align=\"left\"><b>")
-           .append(_("Tunnel lag"))
+           .append(_t("Tunnel lag"))
            .append(":</b></td><td align=\"right\">")
            .append(_helper.getTunnelLag())
            .append("</td></tr>\n");
         }
 
         buf.append("<tr title=\"")
-           .append(_("Queued requests from other routers to participate in tunnels"))
+           .append(_t("Queued requests from other routers to participate in tunnels"))
            .append("\">" +
                    "<td align=\"left\"><b>")
-           .append(_("Backlog"))
+           .append(_t("Backlog"))
            .append(":</b></td><td align=\"right\">")
            .append(_helper.getInboundBacklog())
            .append("</td></tr>\n" +
@@ -589,7 +589,7 @@ public class SummaryBarRenderer {
         if (_helper == null) return "";
         StringBuilder buf = new StringBuilder(50);
         buf.append("<h4>")
-           .append(_(_helper.getTunnelStatus()))
+           .append(_t(_helper.getTunnelStatus()))
            .append("</h4>\n");
         return buf.toString();
     }
@@ -612,7 +612,7 @@ public class SummaryBarRenderer {
             // Set up title and pre-headings stuff.
             //buf.append("<h3><a href=\"/configupdate\">")
             buf.append("<h3><a href=\"/news\">")
-               .append(_("News &amp; Updates"))
+               .append(_t("News &amp; Updates"))
                .append("</a></h3><hr class=\"b\"><div class=\"newsheadings\">\n");
             // Get news content.
             List<NewsEntry> entries = Collections.emptyList();
@@ -647,11 +647,11 @@ public class SummaryBarRenderer {
                 }
                 buf.append("</ul>\n");
                 //buf.append("<a href=\"/news\">")
-                //   .append(_("Show all news"))
+                //   .append(_t("Show all news"))
                 //   .append("</a>\n");
             } else {
                 buf.append("<center><i>")
-                   .append(_("none"))
+                   .append(_t("none"))
                    .append("</i></center>");
             }
             // Add post-headings stuff.
@@ -661,7 +661,7 @@ public class SummaryBarRenderer {
     }
 
     /** translate a string */
-    private String _(String s) {
+    private String _t(String s) {
         return Messages.getString(s, _context);
     }
 
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java
index 1cd207e454..88a0e43d95 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java
@@ -114,7 +114,7 @@ public class SummaryHelper extends HelperBase {
         long diff = Math.abs(ms);
         if (diff < 3000)
             return "";
-        return " (" + DataHelper.formatDuration2(diff) + " " + _("skew") + ")";
+        return " (" + DataHelper.formatDuration2(diff) + " " + _t("skew") + ")";
     }
 **/
     
@@ -140,19 +140,19 @@ public class SummaryHelper extends HelperBase {
             return "VM Comm System";
         if (_context.router().getUptime() > 60*1000 && (!_context.router().gracefulShutdownInProgress()) &&
             !_context.clientManager().isAlive())
-            return _("ERR-Client Manager I2CP Error - check logs");  // not a router problem but the user should know
+            return _t("ERR-Client Manager I2CP Error - check logs");  // not a router problem but the user should know
         // Warn based on actual skew from peers, not update status, so if we successfully offset
         // the clock, we don't complain.
         //if (!_context.clock().getUpdatedSuccessfully())
         long skew = _context.commSystem().getFramedAveragePeerClockSkew(33);
         // Display the actual skew, not the offset
         if (Math.abs(skew) > 30*1000)
-            return _("ERR-Clock Skew of {0}", DataHelper.formatDuration2(Math.abs(skew)));
+            return _t("ERR-Clock Skew of {0}", DataHelper.formatDuration2(Math.abs(skew)));
         if (_context.router().isHidden())
-            return _("Hidden");
+            return _t("Hidden");
         RouterInfo routerInfo = _context.router().getRouterInfo();
         if (routerInfo == null)
-            return _("Testing");
+            return _t("Testing");
 
         Status status = _context.commSystem().getStatus();
         switch (status) {
@@ -164,37 +164,37 @@ public class SummaryHelper extends HelperBase {
             case IPV4_SNAT_IPV6_OK:
                 RouterAddress ra = routerInfo.getTargetAddress("NTCP");
                 if (ra == null)
-                    return _(status.toStatusString());
+                    return _t(status.toStatusString());
                 byte[] ip = ra.getIP();
                 if (ip == null)
-                    return _("ERR-Unresolved TCP Address");
+                    return _t("ERR-Unresolved TCP Address");
                 // TODO set IPv6 arg based on configuration?
                 if (TransportUtil.isPubliclyRoutable(ip, true))
-                    return _(status.toStatusString());
-                return _("ERR-Private TCP Address");
+                    return _t(status.toStatusString());
+                return _t("ERR-Private TCP Address");
 
             case IPV4_SNAT_IPV6_UNKNOWN:
             case DIFFERENT:
-                return _("ERR-SymmetricNAT");
+                return _t("ERR-SymmetricNAT");
 
             case REJECT_UNSOLICITED:
             case IPV4_DISABLED_IPV6_FIREWALLED:
                 if (routerInfo.getTargetAddress("NTCP") != null)
-                    return _("WARN-Firewalled with Inbound TCP Enabled");
+                    return _t("WARN-Firewalled with Inbound TCP Enabled");
                 // fall through...
             case IPV4_FIREWALLED_IPV6_OK:
             case IPV4_FIREWALLED_IPV6_UNKNOWN:
                 if (((FloodfillNetworkDatabaseFacade)_context.netDb()).floodfillEnabled())
-                    return _("WARN-Firewalled and Floodfill");
+                    return _t("WARN-Firewalled and Floodfill");
                 //if (_context.router().getRouterInfo().getCapabilities().indexOf('O') >= 0)
-                //    return _("WARN-Firewalled and Fast");
-                return _(status.toStatusString());
+                //    return _t("WARN-Firewalled and Fast");
+                return _t(status.toStatusString());
 
             case DISCONNECTED:
-                return _("Disconnected - check network cable");
+                return _t("Disconnected - check network cable");
 
             case HOSED:
-                return _("ERR-UDP Port In Use - Set i2np.udp.internalPort=xxxx in advanced config and restart");
+                return _t("ERR-UDP Port In Use - Set i2np.udp.internalPort=xxxx in advanced config and restart");
 
             case UNKNOWN:
             case IPV4_UNKNOWN_IPV6_FIREWALLED:
@@ -203,14 +203,14 @@ public class SummaryHelper extends HelperBase {
                 ra = routerInfo.getTargetAddress("SSU");
                 if (ra == null && _context.router().getUptime() > 5*60*1000) {
                     if (getActivePeers() <= 0)
-                        return _("ERR-No Active Peers, Check Network Connection and Firewall");
+                        return _t("ERR-No Active Peers, Check Network Connection and Firewall");
                     else if (_context.getProperty(ConfigNetHelper.PROP_I2NP_NTCP_HOSTNAME) == null ||
                         _context.getProperty(ConfigNetHelper.PROP_I2NP_NTCP_PORT) == null)
-                        return _("ERR-UDP Disabled and Inbound TCP host/port not set");
+                        return _t("ERR-UDP Disabled and Inbound TCP host/port not set");
                     else
-                        return _("WARN-Firewalled with UDP Disabled");
+                        return _t("WARN-Firewalled with UDP Disabled");
                 }
-                return _(status.toStatusString());
+                return _t(status.toStatusString());
         }
     }
     
@@ -434,8 +434,8 @@ public class SummaryHelper extends HelperBase {
         
         StringBuilder buf = new StringBuilder(512);
         buf.append("<h3><a href=\"/i2ptunnelmgr\" target=\"_top\" title=\"")
-           .append(_("Add/remove/edit &amp; control your client and server tunnels"))
-           .append("\">").append(_("Local Tunnels"))
+           .append(_t("Add/remove/edit &amp; control your client and server tunnels"))
+           .append("\">").append(_t("Local Tunnels"))
            .append("</a></h3><hr class=\"b\"><div class=\"tunnels\">");
         if (!clients.isEmpty()) {
             Collections.sort(clients, new AlphaComparator());
@@ -447,11 +447,11 @@ public class SummaryHelper extends HelperBase {
                 
                 buf.append("<tr><td align=\"right\"><img src=\"/themes/console/images/");
                 if (_context.clientManager().shouldPublishLeaseSet(h))
-                    buf.append("server.png\" alt=\"Server\" title=\"").append(_("Hidden Service")).append("\">");
+                    buf.append("server.png\" alt=\"Server\" title=\"").append(_t("Hidden Service")).append("\">");
                 else
-                    buf.append("client.png\" alt=\"Client\" title=\"").append(_("Client")).append("\">");
+                    buf.append("client.png\" alt=\"Client\" title=\"").append(_t("Client")).append("\">");
                 buf.append("</td><td align=\"left\"><b><a href=\"tunnels#").append(h.toBase64().substring(0,4));
-                buf.append("\" target=\"_top\" title=\"").append(_("Show tunnels")).append("\">");
+                buf.append("\" target=\"_top\" title=\"").append(_t("Show tunnels")).append("\">");
                 if (name.length() <= 20)
                     buf.append(DataHelper.escapeHTML(name));
                 else
@@ -462,20 +462,20 @@ public class SummaryHelper extends HelperBase {
                     long timeToExpire = ls.getEarliestLeaseDate() - _context.clock().now();
                     if (timeToExpire < 0) {
                         // red or yellow light                 
-                        buf.append("<td><img src=\"/themes/console/images/local_inprogress.png\" alt=\"").append(_("Rebuilding")).append("&hellip;\" title=\"").append(_("Leases expired")).append(" ").append(DataHelper.formatDuration2(0-timeToExpire));
-                        buf.append(" ").append(_("ago")).append(". ").append(_("Rebuilding")).append("&hellip;\"></td></tr>\n");                    
+                        buf.append("<td><img src=\"/themes/console/images/local_inprogress.png\" alt=\"").append(_t("Rebuilding")).append("&hellip;\" title=\"").append(_t("Leases expired")).append(" ").append(DataHelper.formatDuration2(0-timeToExpire));
+                        buf.append(" ").append(_t("ago")).append(". ").append(_t("Rebuilding")).append("&hellip;\"></td></tr>\n");                    
                     } else {
                         // green light 
-                        buf.append("<td><img src=\"/themes/console/images/local_up.png\" alt=\"Ready\" title=\"").append(_("Ready")).append("\"></td></tr>\n");
+                        buf.append("<td><img src=\"/themes/console/images/local_up.png\" alt=\"Ready\" title=\"").append(_t("Ready")).append("\"></td></tr>\n");
                     }
                 } else {
                     // yellow light
-                    buf.append("<td><img src=\"/themes/console/images/local_inprogress.png\" alt=\"").append(_("Building")).append("&hellip;\" title=\"").append(_("Building tunnels")).append("&hellip;\"></td></tr>\n");
+                    buf.append("<td><img src=\"/themes/console/images/local_inprogress.png\" alt=\"").append(_t("Building")).append("&hellip;\" title=\"").append(_t("Building tunnels")).append("&hellip;\"></td></tr>\n");
                 }
             }
             buf.append("</table>");
         } else {
-            buf.append("<center><i>").append(_("none")).append("</i></center>");
+            buf.append("<center><i>").append(_t("none")).append("</i></center>");
         }
         buf.append("</div>\n");
         return buf.toString();
@@ -486,7 +486,7 @@ public class SummaryHelper extends HelperBase {
      *  Inner class, can't be Serializable
      */
     private class AlphaComparator implements Comparator<Destination> {
-        private final String xsc = _("shared clients");
+        private final String xsc = _t("shared clients");
 
         public int compare(Destination lhs, Destination rhs) {
             String lname = getName(lhs);
@@ -511,9 +511,9 @@ public class SummaryHelper extends HelperBase {
             if (name == null)
                 name = d.calculateHash().toBase64().substring(0,6);
             else
-                name = _(name);
+                name = _t(name);
         } else {
-            name = _(name);
+            name = _t(name);
         }
         return name;
     }
@@ -712,12 +712,12 @@ public class SummaryHelper extends HelperBase {
                 buf.append("<hr>");
             else
                 needSpace = true;
-            buf.append("<h4><b>").append(_("Update downloaded")).append("<br>");
+            buf.append("<h4><b>").append(_t("Update downloaded")).append("<br>");
             if (_context.hasWrapper())
-                buf.append(_("Click Restart to install"));
+                buf.append(_t("Click Restart to install"));
             else
-                buf.append(_("Click Shutdown and restart to install"));
-            buf.append(' ').append(_("Version {0}", DataHelper.escapeHTML(dver)));
+                buf.append(_t("Click Shutdown and restart to install"));
+            buf.append(' ').append(_t("Version {0}", DataHelper.escapeHTML(dver)));
             buf.append("</b></h4>");
         }
         boolean avail = updateAvailable();
@@ -731,8 +731,8 @@ public class SummaryHelper extends HelperBase {
                 buf.append("<hr>");
             else
                 needSpace = true;
-            buf.append("<h4><b>").append(_("Update available")).append(":<br>");
-            buf.append(_("Version {0}", getUpdateVersion())).append("<br>");
+            buf.append("<h4><b>").append(_t("Update available")).append(":<br>");
+            buf.append(_t("Version {0}", getUpdateVersion())).append("<br>");
             buf.append(constraint).append("</b></h4>");
             avail = false;
         }
@@ -755,7 +755,7 @@ public class SummaryHelper extends HelperBase {
                 if (avail) {
                     buf.append("<button type=\"submit\" class=\"download\" name=\"updateAction\" value=\"signed\" >")
                        // Note to translators: parameter is a version, e.g. "0.8.4"
-                       .append(_("Download {0} Update", getUpdateVersion()))
+                       .append(_t("Download {0} Update", getUpdateVersion()))
                        .append("</button><br>\n");
                 }
                 if (devSU3Avail) {
@@ -763,7 +763,7 @@ public class SummaryHelper extends HelperBase {
                        // Note to translators: parameter is a router version, e.g. "0.9.19-16"
                        // <br> is optional, to help the browser make the lines even in the button
                        // If the translation is shorter than the English, you should probably not include <br>
-                       .append(_("Download Signed<br>Development Update<br>{0}", getDevSU3UpdateVersion()))
+                       .append(_t("Download Signed<br>Development Update<br>{0}", getDevSU3UpdateVersion()))
                        .append("</button><br>\n");
                 }
                 if (unsignedAvail) {
@@ -771,7 +771,7 @@ public class SummaryHelper extends HelperBase {
                        // Note to translators: parameter is a date and time, e.g. "02-Mar 20:34 UTC"
                        // <br> is optional, to help the browser make the lines even in the button
                        // If the translation is shorter than the English, you should probably not include <br>
-                       .append(_("Download Unsigned<br>Update {0}", getUnsignedUpdateVersion()))
+                       .append(_t("Download Unsigned<br>Update {0}", getUnsignedUpdateVersion()))
                        .append("</button><br>\n");
                 }
                 buf.append("</form>\n");
@@ -795,9 +795,9 @@ public class SummaryHelper extends HelperBase {
         StringBuilder buf = new StringBuilder(256);
         if (showFirewallWarning()) {
             buf.append("<h4><a href=\"/confignet\" target=\"_top\" title=\"")
-               .append(_("Help with firewall configuration"))
+               .append(_t("Help with firewall configuration"))
                .append("\">")
-               .append(_("Check network connection and NAT/firewall"))
+               .append(_t("Check network connection and NAT/firewall"))
                .append("</a></h4>");
         }
 
@@ -816,7 +816,7 @@ public class SummaryHelper extends HelperBase {
                 String uri = getRequestURI();
                 buf.append("<p><form action=\"").append(uri).append("\" method=\"POST\">\n");
                 buf.append("<input type=\"hidden\" name=\"reseedNonce\" value=\"").append(nonce).append("\" >\n");
-                buf.append("<button type=\"submit\" class=\"reload\" value=\"Reseed\" >").append(_("Reseed")).append("</button></form></p>\n");
+                buf.append("<button type=\"submit\" class=\"reload\" value=\"Reseed\" >").append(_t("Reseed")).append("</button></form></p>\n");
             }
         }
         // If a new reseed ain't running, and the last reseed had errors, show error message
@@ -901,18 +901,18 @@ public class SummaryHelper extends HelperBase {
 
         StringBuilder buf = new StringBuilder(2048);
         buf.append("<table class=\"sidebarconf\"><tr><th>")
-           .append(_("Remove"))
+           .append(_t("Remove"))
            .append("</th><th>")
-           .append(_("Name"))
+           .append(_t("Name"))
            .append("</th><th colspan=\"2\">")
-           .append(_("Order"))
+           .append(_t("Order"))
            .append("</th></tr>\n");
         for (String section : sections) {
             int i = sections.indexOf(section);
             buf.append("<tr><td align=\"center\"><input type=\"checkbox\" class=\"optbox\" name=\"delete_")
                .append(i)
                .append("\"></td><td align=\"left\">")
-               .append(_(sectionNames.get(section)))
+               .append(_t(sectionNames.get(section)))
                .append("</td><td align=\"right\"><input type=\"hidden\" name=\"order_")
                .append(i).append('_').append(section)
                .append("\" value=\"")
@@ -922,22 +922,22 @@ public class SummaryHelper extends HelperBase {
                 buf.append("<button type=\"submit\" class=\"buttonTop\" name=\"action\" value=\"move_")
                    .append(i)
                    .append("_top\"><img alt=\"")
-                   .append(_("Top"))
+                   .append(_t("Top"))
                    .append("\" src=\"")
                    .append(imgPath)
                    .append("move_top.png")
                    .append("\" title=\"")
-                   .append(_("Move to top"))
+                   .append(_t("Move to top"))
                    .append("\"/></button>");
                 buf.append("<button type=\"submit\" class=\"buttonUp\" name=\"action\" value=\"move_")
                    .append(i)
                    .append("_up\"><img alt=\"")
-                   .append(_("Up"))
+                   .append(_t("Up"))
                    .append("\" src=\"")
                    .append(imgPath)
                    .append("move_up.png")
                    .append("\" title=\"")
-                   .append(_("Move up"))
+                   .append(_t("Move up"))
                    .append("\"/></button>");
             }
             buf.append("</td><td align=\"left\">");
@@ -945,34 +945,34 @@ public class SummaryHelper extends HelperBase {
                 buf.append("<button type=\"submit\" class=\"buttonDown\" name=\"action\" value=\"move_")
                    .append(i)
                    .append("_down\"><img alt=\"")
-                   .append(_("Down"))
+                   .append(_t("Down"))
                    .append("\" src=\"")
                    .append(imgPath)
                    .append("move_down.png")
                    .append("\" title=\"")
-                   .append(_("Move down"))
+                   .append(_t("Move down"))
                    .append("\"/></button>");
                 buf.append("<button type=\"submit\" class=\"buttonBottom\" name=\"action\" value=\"move_")
                    .append(i)
                    .append("_bottom\"><img alt=\"")
-                   .append(_("Bottom"))
+                   .append(_t("Bottom"))
                    .append("\" src=\"")
                    .append(imgPath)
                    .append("move_bottom.png")
                    .append("\" title=\"")
-                   .append(_("Move to bottom"))
+                   .append(_t("Move to bottom"))
                    .append("\"/></button>");
             }
             buf.append("</td></tr>\n");
         }
         buf.append("<tr><td align=\"center\">" +
                    "<input type=\"submit\" name=\"action\" class=\"delete\" value=\"")
-           .append(_("Delete selected"))
+           .append(_t("Delete selected"))
            .append("\"></td><td align=\"left\"><b>")
-           .append(_("Add")).append(":</b> " +
+           .append(_t("Add")).append(":</b> " +
                    "<select name=\"name\">\n" +
                    "<option value=\"\" selected=\"selected\">")
-           .append(_("Select a section to add"))
+           .append(_t("Select a section to add"))
            .append("</option>\n");
 
         for (String s : sortedSections) {
@@ -986,7 +986,7 @@ public class SummaryHelper extends HelperBase {
            .append("\"></td>" +
                    "<td align=\"center\" colspan=\"2\">" +
                    "<input type=\"submit\" name=\"action\" class=\"add\" value=\"")
-           .append(_("Add item"))
+           .append(_t("Add item"))
            .append("\"></td></tr>")
            .append("</table>\n");
         return buf.toString();
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/SummaryRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/SummaryRenderer.java
index 06d6e9af51..d97d185a85 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/SummaryRenderer.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/SummaryRenderer.java
@@ -139,9 +139,9 @@ class SummaryRenderer {
                 else
                     p = DataHelper.formatDuration2(period).replace("&nbsp;", " ");
                 if (showEvents)
-                    title = name + ' ' + _("events in {0}", p);
+                    title = name + ' ' + _t("events in {0}", p);
                 else
-                    title = name + ' ' + _("averaged for {0}", p);
+                    title = name + ' ' + _t("averaged for {0}", p);
                 def.setTitle(title);
             }
             String path = _listener.getData().getPath();
@@ -151,7 +151,7 @@ class SummaryRenderer {
             if (showEvents) {
                 // include the average event count on the plot
                 plotName = dsNames[1];
-                descr = _("Events per period");
+                descr = _t("Events per period");
             } else {
                 // include the average value
                 plotName = dsNames[0];
@@ -159,12 +159,12 @@ class SummaryRenderer {
                 // (there are over 500 of them)
                 // but the descriptions for the default graphs are tagged in
                 // Strings.java
-                descr = _(_listener.getRate().getRateStat().getDescription());
+                descr = _t(_listener.getRate().getRateStat().getDescription());
             }
 
             //long started = ((RouterContext)_context).router().getWhenStarted();
             //if (started > start && started < end)
-            //    def.vrule(started / 1000, RESTART_BAR_COLOR, _("Restart"), 4.0f);
+            //    def.vrule(started / 1000, RESTART_BAR_COLOR, _t("Restart"), 4.0f);
 
             def.datasource(plotName, path, plotName, SummaryListener.CF, _listener.getBackendName());
             if (descr.length() > 0) {
@@ -173,22 +173,22 @@ class SummaryRenderer {
                 def.area(plotName, Color.BLUE);
             }
             if (!hideLegend) {
-                def.gprint(plotName, SummaryListener.CF, _("avg") + ": %.2f %s");
-                def.gprint(plotName, "MAX", ' ' + _("max") + ": %.2f %S");
-                def.gprint(plotName, "LAST", ' ' + _("now") + ": %.2f %S\\r");
+                def.gprint(plotName, SummaryListener.CF, _t("avg") + ": %.2f %s");
+                def.gprint(plotName, "MAX", ' ' + _t("max") + ": %.2f %S");
+                def.gprint(plotName, "LAST", ' ' + _t("now") + ": %.2f %S\\r");
             }
             String plotName2 = null;
             if (lsnr2 != null) {
                 String dsNames2[] = lsnr2.getData().getDsNames();
                 plotName2 = dsNames2[0];
                 String path2 = lsnr2.getData().getPath();
-                String descr2 = _(lsnr2.getRate().getRateStat().getDescription());
+                String descr2 = _t(lsnr2.getRate().getRateStat().getDescription());
                 def.datasource(plotName2, path2, plotName2, SummaryListener.CF, lsnr2.getBackendName());
                 def.line(plotName2, Color.RED, descr2 + "\\r", 3);
                 if (!hideLegend) {
-                    def.gprint(plotName2, SummaryListener.CF, _("avg") + ": %.2f %s");
-                    def.gprint(plotName2, "MAX", ' ' + _("max") + ": %.2f %S");
-                    def.gprint(plotName2, "LAST", ' ' + _("now") + ": %.2f %S\\r");
+                    def.gprint(plotName2, SummaryListener.CF, _t("avg") + ": %.2f %s");
+                    def.gprint(plotName2, "MAX", ' ' + _t("max") + ": %.2f %S");
+                    def.gprint(plotName2, "LAST", ' ' + _t("now") + ": %.2f %S\\r");
                 }
             }
             if (!hideLegend) {
@@ -198,7 +198,7 @@ class SummaryRenderer {
                 for (Map.Entry<Long, String> event : events.entrySet()) {
                     long started = event.getKey().longValue();
                     if (started > start && started < end) {
-                        String legend = _("Restart") + ' ' + sdf.format(new Date(started)) + " UTC " + event.getValue() + "\\r";
+                        String legend = _t("Restart") + ' ' + sdf.format(new Date(started)) + " UTC " + event.getValue() + "\\r";
                         def.vrule(started / 1000, RESTART_BAR_COLOR, legend, 4.0f);
                     }
                 }
@@ -271,7 +271,7 @@ class SummaryRenderer {
     private static final boolean IS_WIN = SystemVersion.isWindows();
 
     /** translate a string */
-    private String _(String s) {
+    private String _t(String s) {
         // the RRD font doesn't have zh chars, at least on my system
         // Works on 1.5.9 except on windows
         if (IS_WIN && "zh".equals(Messages.getLanguage(_context)))
@@ -282,7 +282,7 @@ class SummaryRenderer {
     /**
      *  translate a string with a parameter
      */
-    private String _(String s, String o) {
+    private String _t(String s, String o) {
         // the RRD font doesn't have zh chars, at least on my system
         // Works on 1.5.9 except on windows
         if (IS_WIN && "zh".equals(Messages.getLanguage(_context)))
diff --git a/apps/routerconsole/java/src/net/i2p/router/web/TunnelRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/TunnelRenderer.java
index 9fff49d1e5..3784e4a30a 100644
--- a/apps/routerconsole/java/src/net/i2p/router/web/TunnelRenderer.java
+++ b/apps/routerconsole/java/src/net/i2p/router/web/TunnelRenderer.java
@@ -33,7 +33,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#exploratory\">" + _("configure") + "</a>)</h2>\n");
+        out.write("<div class=\"wideload\"><h2><a name=\"exploratory\" ></a>" + _t("Exploratory tunnels") + " (<a href=\"/configtunnels#exploratory\">" + _t("configure") + "</a>)</h2>\n");
         renderPool(out, _context.tunnelManager().getInboundExploratoryPool(), _context.tunnelManager().getOutboundExploratoryPool());
         
         List<Hash> destinations = null;
@@ -57,20 +57,20 @@ 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") + ' ' + DataHelper.escapeHTML(_(name)));
+                      + "\" ></a>" + _t("Client tunnels for") + ' ' + DataHelper.escapeHTML(_t(name)));
             if (isLocal)
-                out.write(" (<a href=\"/configtunnels#" + client.toBase64().substring(0,4) +"\">" + _("configure") + "</a>)</h2>\n");
+                out.write(" (<a href=\"/configtunnels#" + client.toBase64().substring(0,4) +"\">" + _t("configure") + "</a>)</h2>\n");
             else
-                out.write(" (" + _("dead") + ")</h2>\n");
+                out.write(" (" + _t("dead") + ")</h2>\n");
             renderPool(out, in, outPool);
         }
         
         List<HopConfig> 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>" + _t("Participating tunnels") + "</h2><table>\n");
+        out.write("<tr><th>" + _t("Receive on") + "</th><th>" + _t("From") + "</th><th>"
+                  + _t("Send on") + "</th><th>" + _t("To") + "</th><th>" + _t("Expiration") + "</th>"
+                  + "<th>" + _t("Usage") + "</th><th>" + _t("Rate") + "</th><th>" + _t("Role") + "</th></tr>\n");
         long processed = 0;
         RateStat rs = _context.statManager().getRate("tunnel.participatingMessageCount");
         if (rs != null)
@@ -108,7 +108,7 @@ public class TunnelRenderer {
             if (timeLeft > 0)
                 out.write("<td class=\"cells\" align=\"center\">" + DataHelper.formatDuration2(timeLeft) + "</td>");
             else
-                out.write("<td class=\"cells\" align=\"center\">(" + _("grace period") + ")</td>");
+                out.write("<td class=\"cells\" align=\"center\">(" + _t("grace period") + ")</td>");
             out.write("<td class=\"cells\" align=\"center\">" + cfg.getProcessedMessagesCount() + " KB</td>");
             int lifetime = (int) ((_context.clock().now() - cfg.getCreation()) / 1000);
             if (lifetime <= 0)
@@ -118,18 +118,18 @@ public class TunnelRenderer {
             int bps = 1024 * 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\">" + _t("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\">" + _t("Inbound Gateway") + "</td>");
             else
-                out.write("<td class=\"cells\" align=\"center\">" + _("Participant") + "</td>");
+                out.write("<td class=\"cells\" align=\"center\">" + _t("Participant") + "</td>");
             out.write("</tr>\n");
         }
         out.write("</table>\n");
         if (displayed > DISPLAY_LIMIT)
-            out.write("<div class=\"statusnotes\"><b>" + _("Limited display to the {0} tunnels with the highest usage", DISPLAY_LIMIT)  + "</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.formatSize2(processed*1024) + "B</b></div>\n");
+            out.write("<div class=\"statusnotes\"><b>" + _t("Limited display to the {0} tunnels with the highest usage", DISPLAY_LIMIT)  + "</b></div>\n");
+        out.write("<div class=\"statusnotes\"><b>" + _t("Inactive participating tunnels") + ": " + inactive + "</b></div>\n");
+        out.write("<div class=\"statusnotes\"><b>" + _t("Lifetime bandwidth usage") + ": " + DataHelper.formatSize2(processed*1024) + "B</b></div>\n");
         //renderPeers(out);
         out.write("</div>");
     }
@@ -159,16 +159,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>" + _t("In/Out") + "</th><th>" + _t("Expiry") + "</th><th>" + _t("Usage") + "</th><th>" + _t("Gateway") + "</th>");
         if (maxLength > 3) {
             out.write("<th align=\"center\" colspan=\"" + (maxLength - 2));
-            out.write("\">" + _("Participants") + "</th>");
+            out.write("\">" + _t("Participants") + "</th>");
         }
         else if (maxLength == 3) {
-            out.write("<th>" + _("Participant") + "</th>");
+            out.write("<th>" + _t("Participant") + "</th>");
         }
         if (maxLength > 1) {
-            out.write("<th>" + _("Endpoint") + "</th>");
+            out.write("<th>" + _t("Endpoint") + "</th>");
         }
         out.write("</tr>\n");
         for (int i = 0; i < tunnels.size(); i++) {
@@ -208,22 +208,22 @@ public class TunnelRenderer {
         if (in != null) {
             List pending = in.listPending();
             if (!pending.isEmpty()) {
-                out.write("<div class=\"statusnotes\"><center><b>" + _("Build in progress") + ": " + pending.size() + " " + _("inbound") + "</b></center></div>\n");
+                out.write("<div class=\"statusnotes\"><center><b>" + _t("Build in progress") + ": " + pending.size() + " " + _t("inbound") + "</b></center></div>\n");
                 live += pending.size();
             }
         }
         if (outPool != null) {
             List pending = outPool.listPending();
             if (!pending.isEmpty()) {
-                out.write("<div class=\"statusnotes\"><center><b>" + _("Build in progress") + ": " + pending.size() + " " + _("outbound") + "</b></center></div>\n");
+                out.write("<div class=\"statusnotes\"><center><b>" + _t("Build in progress") + ": " + pending.size() + " " + _t("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.") + "</b></center></div>\n");
-        out.write("<div class=\"statusnotes\"><center><b>" + _("Lifetime bandwidth usage") + ": " +
-                  DataHelper.formatSize2(processedIn*1024) + "B " + _("in") + ", " +
-                  DataHelper.formatSize2(processedOut*1024) + "B " + _("out") + "</b></center></div>");
+            out.write("<div class=\"statusnotes\"><center><b>" + _t("No tunnels; waiting for the grace period to end.") + "</b></center></div>\n");
+        out.write("<div class=\"statusnotes\"><center><b>" + _t("Lifetime bandwidth usage") + ": " +
+                  DataHelper.formatSize2(processedIn*1024) + "B " + _t("in") + ", " +
+                  DataHelper.formatSize2(processedOut*1024) + "B " + _t("out") + "</b></center></div>");
     }
     
 /****
@@ -241,8 +241,8 @@ public class TunnelRenderer {
         List<Hash> peerList = new ArrayList(peers);
         Collections.sort(peerList, new CountryComparator(this._context.commSystem()));
 
-        out.write("<h2><a name=\"peers\"></a>" + _("Tunnel Counts By Peer") + "</h2>\n");
-        out.write("<table><tr><th>" + _("Peer") + "</th><th>" + _("Our Tunnels") + "</th><th>" + _("% of total") + "</th><th>" + _("Participating Tunnels") + "</th><th>" + _("% of total") + "</th></tr>\n");
+        out.write("<h2><a name=\"peers\"></a>" + _t("Tunnel Counts By Peer") + "</h2>\n");
+        out.write("<table><tr><th>" + _t("Peer") + "</th><th>" + _t("Our Tunnels") + "</th><th>" + _t("% of total") + "</th><th>" + _t("Participating Tunnels") + "</th><th>" + _t("% of total") + "</th></tr>\n");
         for (Hash h : peerList) {
              out.write("<tr> <td class=\"cells\" align=\"center\">");
              out.write(netDbLink(h));
@@ -260,7 +260,7 @@ public class TunnelRenderer {
                  out.write('0');
              out.write('\n');
         }
-        out.write("<tr class=\"tablefooter\"> <td align=\"center\"><b>" + _("Totals") + "</b> <td align=\"center\"><b>" + tunnelCount);
+        out.write("<tr class=\"tablefooter\"> <td align=\"center\"><b>" + _t("Totals") + "</b> <td align=\"center\"><b>" + tunnelCount);
         out.write("</b> <td>&nbsp;</td> <td align=\"center\"><b>" + partCount);
         out.write("</b> <td>&nbsp;</td></tr></table></div>\n");
     }
@@ -343,12 +343,12 @@ public class TunnelRenderer {
     }
 
     /** translate a string */
-    private String _(String s) {
+    private String _t(String s) {
         return Messages.getString(s, _context);
     }
 
     /** translate a string */
-    public String _(String s, Object o) {
+    public String _t(String s, Object o) {
         return Messages.getString(s, o, _context);
     }
 }
diff --git a/apps/routerconsole/java/strings/Strings.java b/apps/routerconsole/java/strings/Strings.java
index 4629380179..8254d657b5 100644
--- a/apps/routerconsole/java/strings/Strings.java
+++ b/apps/routerconsole/java/strings/Strings.java
@@ -9,76 +9,76 @@ package dummy;
 class Dummy {
     void dummy {
         // wars for ConfigClientsHelper
-        _("addressbook");
-        _("i2psnark");
-        _("i2ptunnel");
-        _("susimail");
-        _("susidns");
-        _("routerconsole");
+        _t("addressbook");
+        _t("i2psnark");
+        _t("i2ptunnel");
+        _t("susimail");
+        _t("susidns");
+        _t("routerconsole");
 
         // clients, taken from clients.config, for ConfigClientsHelper
         // note that if the wording changes in clients.config, we have to
         // keep the old string here as well for existing installs
-        _("Web console");
-        _("SAM application bridge");
-        _("Application tunnels");
-        _("My eepsite web server");
-        _("I2P webserver (eepsite)");        
-        _("Browser launch at startup");
-        _("BOB application bridge");
-        _("I2P Router Console");
-        _("Open Router Console in web browser at startup");        
+        _t("Web console");
+        _t("SAM application bridge");
+        _t("Application tunnels");
+        _t("My eepsite web server");
+        _t("I2P webserver (eepsite)");        
+        _t("Browser launch at startup");
+        _t("BOB application bridge");
+        _t("I2P Router Console");
+        _t("Open Router Console in web browser at startup");        
         
         // tunnel nicknames, taken from i2ptunnel.config so they will display
         // nicely under 'local destinations' in the summary bar
         // note that if the wording changes in i2ptunnel.config, we have to
         // keep the old string here as well for existing installs
-        _("shared clients");
-        _("shared clients (DSA)");
-        _("IRC proxy");
-        _("eepsite");
-        _("I2P webserver");
-        _("HTTP Proxy");        
+        _t("shared clients");
+        _t("shared clients (DSA)");
+        _t("IRC proxy");
+        _t("eepsite");
+        _t("I2P webserver");
+        _t("HTTP Proxy");        
         // older names for pre-0.7.4 installs
-        _("eepProxy");
-        _("ircProxy");
+        _t("eepProxy");
+        _t("ircProxy");
         // hardcoded in i2psnark
-        _("I2PSnark");
+        _t("I2PSnark");
         // hardcoded in iMule?
-        _("iMule");
+        _t("iMule");
 
 
         // standard themes for ConfigUIHelper
-        _("classic");
-        _("dark");
-        _("light");
-        _("midnight");        
+        _t("classic");
+        _t("dark");
+        _t("light");
+        _t("midnight");        
 
         // stat groups for stats.jsp
-        _("Bandwidth");
-        _("BandwidthLimiter");
-        _("ClientMessages");
-        _("Encryption");
-        _("i2cp");
-        _("I2PTunnel");
-        _("InNetPool");
-        _("JobQueue");
-        _("NetworkDatabase");
-        _("ntcp");
-        _("Peers");
-        _("Router");
-        _("Stream");
-        _("Throttle");
-        _("Transport");
-        _("Tunnels");
-        _("udp");
+        _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
-        _("host");
-        _("key");
-        _("port");
+        _t("host");
+        _t("key");
+        _t("port");
         // capabilities
-        _("caps");
+        _t("caps");
     }
 }
diff --git a/apps/routerconsole/jsp/config.jsp b/apps/routerconsole/jsp/config.jsp
index 538fb8a5f2..5e9c0de92f 100644
--- a/apps/routerconsole/jsp/config.jsp
+++ b/apps/routerconsole/jsp/config.jsp
@@ -14,7 +14,7 @@
 
 <jsp:useBean class="net.i2p.router.web.ConfigNetHelper" id="nethelper" scope="request" />
 <jsp:setProperty name="nethelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
-<h1><%=intl._("I2P Bandwidth Configuration")%></h1>
+<h1><%=intl._t("I2P Bandwidth Configuration")%></h1>
 <div class="main" id="main">
  <%@include file="confignav.jsi" %>
 
@@ -25,12 +25,12 @@
  <input type="hidden" name="nonce" value="<%=pageNonce%>">
  <input type="hidden" name="action" value="blah" >
  <input type="hidden" name="ratesOnly" value="1" >
- <h3><%=intl._("Bandwidth limiter")%></h3><p>
+ <h3><%=intl._t("Bandwidth limiter")%></h3><p>
  <img src="/themes/console/images/itoopie_xsm.png" alt="">
- <b><%=intl._("I2P will work best if you configure your rates to match the speed of your internet connection.")%></b>
+ <b><%=intl._t("I2P will work best if you configure your rates to match the speed of your internet connection.")%></b>
  </p>
    <div class="wideload"><table><tr><td><input style="text-align: right; width: 5em;" name="inboundrate" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="inboundRate" />" >
-          <%=intl._("KBps In")%>
+          <%=intl._t("KBps In")%>
         </td><td>(<jsp:getProperty name="nethelper" property="inboundRateBits" />)</td>
 <% /********
 <!-- let's keep this simple...
@@ -41,7 +41,7 @@
 *********/ %>
     </tr><tr>
         <td><input style="text-align: right; width: 5em;" name="outboundrate" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="outboundRate" />" >
-         <%=intl._("KBps Out")%>
+         <%=intl._t("KBps Out")%>
         </td><td>(<jsp:getProperty name="nethelper" property="outboundRateBits" />)</td>
 <% /********
 <!-- let's keep this simple...
@@ -53,31 +53,31 @@
 -->
 *********/ %>
     </tr><tr>
-        <td><jsp:getProperty name="nethelper" property="sharePercentageBox" /> <%=intl._("Share")%></td>
+        <td><jsp:getProperty name="nethelper" property="sharePercentageBox" /> <%=intl._t("Share")%></td>
         <td>(<jsp:getProperty name="nethelper" property="shareRateBits" />)
 </td></tr></table></div>
 <p><% int share = nethelper.getShareBandwidth();
     if (share < 12) {
         out.print("<b>");
-        out.print(intl._("NOTE"));
+        out.print(intl._t("NOTE"));
         out.print("</b>: ");
-        out.print(intl._("You have configured I2P to share only {0} KBps.", share));
+        out.print(intl._t("You have configured I2P to share only {0} KBps.", share));
         out.print("\n");
 
-        out.print(intl._("I2P requires at least 12KBps to enable sharing. "));
-        out.print(intl._("Please enable sharing (participating in tunnels) by configuring more bandwidth. "));
-        out.print(intl._("It improves your anonymity by creating cover traffic, and helps the network."));
+        out.print(intl._t("I2P requires at least 12KBps to enable sharing. "));
+        out.print(intl._t("Please enable sharing (participating in tunnels) by configuring more bandwidth. "));
+        out.print(intl._t("It improves your anonymity by creating cover traffic, and helps the network."));
     } else {
-        out.print(intl._("You have configured I2P to share {0} KBps.", share));
+        out.print(intl._t("You have configured I2P to share {0} KBps.", share));
         out.print("\n");
 
-        out.print(intl._("The higher the share bandwidth the more you improve your anonymity and help the network."));
+        out.print(intl._t("The higher the share bandwidth the more you improve your anonymity and help the network."));
     }
  %></p>
-<p><a href="confignet"><%=intl._("Advanced network configuration page")%></a></p><hr>
+<p><a href="confignet"><%=intl._t("Advanced network configuration page")%></a></p><hr>
 <div class="formaction">
-<input type="reset" class="cancel" value="<%=intl._("Cancel")%>" >
-<input type="submit" class="accept" name="save" value="<%=intl._("Save changes")%>" >
+<input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" >
+<input type="submit" class="accept" name="save" value="<%=intl._t("Save changes")%>" >
 </div>
 </form>
 </div></div></body></html>
diff --git a/apps/routerconsole/jsp/configadvanced.jsp b/apps/routerconsole/jsp/configadvanced.jsp
index 961ac83fa8..3ba2deed10 100644
--- a/apps/routerconsole/jsp/configadvanced.jsp
+++ b/apps/routerconsole/jsp/configadvanced.jsp
@@ -15,7 +15,7 @@
 <jsp:useBean class="net.i2p.router.web.ConfigAdvancedHelper" id="advancedhelper" scope="request" />
 <jsp:setProperty name="advancedhelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
 
-<h1><%=intl._("I2P Advanced Configuration")%></h1>
+<h1><%=intl._t("I2P Advanced Configuration")%></h1>
 <div class="main" id="main">
 
  <%@include file="confignav.jsi" %>
@@ -24,14 +24,14 @@
 <%@include file="formhandler.jsi" %>
  <div class="configure">
  <div class="wideload">
-<h3><%=intl._("Floodfill Configuration")%></h3>
-<p><%=intl._("Floodill participation helps the network, but may use more of your computer's resources.")%>
+<h3><%=intl._t("Floodfill Configuration")%></h3>
+<p><%=intl._t("Floodill participation helps the network, but may use more of your computer's resources.")%>
 </p><p>
 <%
     if (advancedhelper.isFloodfill()) {
-%><%=intl._("This router is currently a floodfill participant.")%><%
+%><%=intl._t("This router is currently a floodfill participant.")%><%
     } else {
-%><%=intl._("This router is not currently a floodfill participant.")%><%
+%><%=intl._t("This router is not currently a floodfill participant.")%><%
     }
 %>
 </p>
@@ -39,15 +39,15 @@
 <input type="hidden" name="nonce" value="<%=pageNonce%>" >
 <input type="hidden" name="action" value="ff" >
 <input type="radio" class="optbox" name="ff" value="auto" <%=advancedhelper.getFFChecked(2) %> >
-<%=intl._("Automatic")%><br>
+<%=intl._t("Automatic")%><br>
 <input type="radio" class="optbox" name="ff" value="true" <%=advancedhelper.getFFChecked(1) %> >
-<%=intl._("Force On")%><br>
+<%=intl._t("Force On")%><br>
 <input type="radio" class="optbox" name="ff" value="false" <%=advancedhelper.getFFChecked(0) %> >
-<%=intl._("Disable")%><br>
+<%=intl._t("Disable")%><br>
 <div class="formaction">
-<input type="submit" name="shouldsave" class="accept" value="<%=intl._("Save changes")%>" >
+<input type="submit" name="shouldsave" class="accept" value="<%=intl._t("Save changes")%>" >
 </div></form>
-<h3><%=intl._("Advanced I2P Configuration")%></h3>
+<h3><%=intl._t("Advanced I2P Configuration")%></h3>
 <% if (advancedhelper.isAdvanced()) { %>
  <form action="" method="POST">
  <input type="hidden" name="nonce" value="<%=pageNonce%>" >
@@ -56,11 +56,11 @@
  <textarea rows="32" cols="60" name="nofilter_config" wrap="off" spellcheck="false" <% if (!advancedhelper.isAdvanced()) { %>readonly="readonly"<% } %>><jsp:getProperty name="advancedhelper" property="settings" /></textarea><br><hr>
 <% if (advancedhelper.isAdvanced()) { %>
       <div class="formaction">
-        <input type="reset" class="cancel" value="<%=intl._("Cancel")%>" >
-        <input type="submit" name="shouldsave" class="accept" value="<%=intl._("Save changes")%>" >
- <br><b><%=intl._("NOTE")%>:</b> <%=intl._("Some changes may require a restart to take effect.")%>
+        <input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" >
+        <input type="submit" name="shouldsave" class="accept" value="<%=intl._t("Save changes")%>" >
+ <br><b><%=intl._t("NOTE")%>:</b> <%=intl._t("Some changes may require a restart to take effect.")%>
  </div></form>
 <% } else { %>
-<%=intl._("To make changes, edit the file {0}.", "<tt>" + advancedhelper.getConfigFileName() + "</tt>")%>
+<%=intl._t("To make changes, edit the file {0}.", "<tt>" + advancedhelper.getConfigFileName() + "</tt>")%>
 <% }  // isAdvanced %>
 </div></div></div></body></html>
diff --git a/apps/routerconsole/jsp/configclients.jsp b/apps/routerconsole/jsp/configclients.jsp
index 65f67daf50..cbb9710d4f 100644
--- a/apps/routerconsole/jsp/configclients.jsp
+++ b/apps/routerconsole/jsp/configclients.jsp
@@ -20,43 +20,43 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
 <jsp:useBean class="net.i2p.router.web.ConfigClientsHelper" id="clientshelper" scope="request" />
 <jsp:setProperty name="clientshelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
 <jsp:setProperty name="clientshelper" property="edit" value="<%=request.getParameter(\"edit\")%>" />
-<h1><%=intl._("I2P Client Configuration")%></h1>
+<h1><%=intl._t("I2P Client Configuration")%></h1>
 <div class="main" id="main">
  <%@include file="confignav.jsi" %>
 
  <jsp:useBean class="net.i2p.router.web.ConfigClientsHandler" id="formhandler" scope="request" />
 <%@include file="formhandler.jsi" %>
  <div class="configure">
- <h3><%=intl._("Client Configuration")%></h3><p>
- <%=intl._("The Java clients listed below are started by the router and run in the same JVM.")%><br>
- <img src="/themes/console/images/itoopie_xsm.png" alt=""><b><%=intl._("Be careful changing any settings here. The 'router console' and 'application tunnels' are required for most uses of I2P. Only advanced users should change these.")%></b>
+ <h3><%=intl._t("Client Configuration")%></h3><p>
+ <%=intl._t("The Java clients listed below are started by the router and run in the same JVM.")%><br>
+ <img src="/themes/console/images/itoopie_xsm.png" alt=""><b><%=intl._t("Be careful changing any settings here. The 'router console' and 'application tunnels' are required for most uses of I2P. Only advanced users should change these.")%></b>
  </p><div class="wideload">
 <form action="" method="POST">
 <input type="hidden" name="nonce" value="<%=pageNonce%>" >
 <jsp:getProperty name="clientshelper" property="form1" />
-<p><i><%=intl._("To change other client options, edit the file")%>
+<p><i><%=intl._t("To change other client options, edit the file")%>
  <%=net.i2p.router.startup.ClientAppConfig.configFile(net.i2p.I2PAppContext.getGlobalContext()).getAbsolutePath()%>.
- <%=intl._("All changes require restart to take effect.")%></i>
+ <%=intl._t("All changes require restart to take effect.")%></i>
  </p><hr><div class="formaction">
- <input type="submit" class="cancel" name="foo" value="<%=intl._("Cancel")%>" />
+ <input type="submit" class="cancel" name="foo" value="<%=intl._t("Cancel")%>" />
 <% if (clientshelper.isClientChangeEnabled() && request.getParameter("edit") == null) { %>
- <input type="submit" name="edit" class="add" value="<%=intl._("Add Client")%>" />
+ <input type="submit" name="edit" class="add" value="<%=intl._t("Add Client")%>" />
 <% } %>
- <input type="submit" class="accept" name="action" value="<%=intl._("Save Client Configuration")%>" />
+ <input type="submit" class="accept" name="action" value="<%=intl._t("Save Client Configuration")%>" />
 </div></form></div>
 
-<h3><a name="i2cp"></a><%=intl._("Advanced Client Interface Configuration")%></h3>
+<h3><a name="i2cp"></a><%=intl._t("Advanced Client Interface Configuration")%></h3>
 <form action="" method="POST">
 <input type="hidden" name="nonce" value="<%=pageNonce%>" >
 <p>
-<b><%=intl._("External I2CP (I2P Client Protocol) Interface Configuration")%></b><br>
+<b><%=intl._t("External I2CP (I2P Client Protocol) Interface Configuration")%></b><br>
 <input type="radio" class="optbox" name="mode" value="1" <%=clientshelper.i2cpModeChecked(1) %> >
-<%=intl._("Enabled without SSL")%><br>
+<%=intl._t("Enabled without SSL")%><br>
 <input type="radio" class="optbox" name="mode" value="2" <%=clientshelper.i2cpModeChecked(2) %> >
-<%=intl._("Enabled with SSL required")%><br>
+<%=intl._t("Enabled with SSL required")%><br>
 <input type="radio" class="optbox" name="mode" value="0" <%=clientshelper.i2cpModeChecked(0) %> >
-<%=intl._("Disabled - Clients outside this Java process may not connect")%><br>
-<%=intl._("I2CP Interface")%>:
+<%=intl._t("Disabled - Clients outside this Java process may not connect")%><br>
+<%=intl._t("I2CP Interface")%>:
 <select name="interface">
 <%
        String[] ips = clientshelper.intfcAddresses();
@@ -72,60 +72,60 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
        }
 %>
 </select><br>
-<%=intl._("I2CP Port")%>:
+<%=intl._t("I2CP Port")%>:
 <input name="port" type="text" size="5" maxlength="5" value="<jsp:getProperty name="clientshelper" property="port" />" ><br>
-<b><%=intl._("Authorization")%></b><br>
+<b><%=intl._t("Authorization")%></b><br>
 <input type="checkbox" class="optbox" name="auth" value="true" <jsp:getProperty name="clientshelper" property="auth" /> >
-<%=intl._("Require username and password")%><br>
-<%=intl._("Username")%>:
+<%=intl._t("Require username and password")%><br>
+<%=intl._t("Username")%>:
 <input name="user" type="text" value="" /><br>
-<%=intl._("Password")%>:
+<%=intl._t("Password")%>:
 <input name="nofilter_pw" type="password" value="" /><br>
-</p><p><b><%=intl._("The default settings will work for most people.")%></b>
-<%=intl._("Any changes made here must also be configured in the external client.")%>
-<%=intl._("Many clients do not support SSL or authorization.")%>
-<i><%=intl._("All changes require restart to take effect.")%></i>
+</p><p><b><%=intl._t("The default settings will work for most people.")%></b>
+<%=intl._t("Any changes made here must also be configured in the external client.")%>
+<%=intl._t("Many clients do not support SSL or authorization.")%>
+<i><%=intl._t("All changes require restart to take effect.")%></i>
 </p><hr><div class="formaction">
-<input type="submit" class="default" name="action" value="<%=intl._("Save Interface Configuration")%>" />
-<input type="submit" class="cancel" name="foo" value="<%=intl._("Cancel")%>" />
-<input type="submit" class="accept" name="action" value="<%=intl._("Save Interface Configuration")%>" />
+<input type="submit" class="default" name="action" value="<%=intl._t("Save Interface Configuration")%>" />
+<input type="submit" class="cancel" name="foo" value="<%=intl._t("Cancel")%>" />
+<input type="submit" class="accept" name="action" value="<%=intl._t("Save Interface Configuration")%>" />
 </div></form>
 
-<h3><a name="webapp"></a><%=intl._("WebApp Configuration")%></h3><p>
- <%=intl._("The Java web applications listed below are started by the webConsole client and run in the same JVM as the router. They are usually web applications accessible through the router console. They may be complete applications (e.g. i2psnark),front-ends to another client or application which must be separately enabled (e.g. susidns, i2ptunnel), or have no web interface at all (e.g. addressbook).")%>
+<h3><a name="webapp"></a><%=intl._t("WebApp Configuration")%></h3><p>
+ <%=intl._t("The Java web applications listed below are started by the webConsole client and run in the same JVM as the router. They are usually web applications accessible through the router console. They may be complete applications (e.g. i2psnark),front-ends to another client or application which must be separately enabled (e.g. susidns, i2ptunnel), or have no web interface at all (e.g. addressbook).")%>
  </p><p>
- <%=intl._("A web app may also be disabled by removing the .war file from the webapps directory; however the .war file and web app will reappear when you update your router to a newer version, so disabling the web app here is the preferred method.")%>
+ <%=intl._t("A web app may also be disabled by removing the .war file from the webapps directory; however the .war file and web app will reappear when you update your router to a newer version, so disabling the web app here is the preferred method.")%>
  </p><div class="wideload">
 <form action="configclients" method="POST">
 <input type="hidden" name="nonce" value="<%=pageNonce%>" >
  <jsp:getProperty name="clientshelper" property="form2" />
- <p><i><%=intl._("All changes require restart to take effect.")%></i>
+ <p><i><%=intl._t("All changes require restart to take effect.")%></i>
  </p><hr><div class="formaction">
- <input type="submit" class="cancel" name="foo" value="<%=intl._("Cancel")%>" />
- <input type="submit" name="action" class="accept" value="<%=intl._("Save WebApp Configuration")%>" />
+ <input type="submit" class="cancel" name="foo" value="<%=intl._t("Cancel")%>" />
+ <input type="submit" name="action" class="accept" value="<%=intl._t("Save WebApp Configuration")%>" />
 </div></form></div>
 
 <%
    if (clientshelper.showPlugins()) {
        if (clientshelper.isPluginUpdateEnabled()) {
 %>
-<h3><a name="pconfig"></a><%=intl._("Plugin Configuration")%></h3><p>
- <%=intl._("The plugins listed below are started by the webConsole client.")%>
+<h3><a name="pconfig"></a><%=intl._t("Plugin Configuration")%></h3><p>
+ <%=intl._t("The plugins listed below are started by the webConsole client.")%>
  </p><div class="wideload">
 <form action="" method="POST">
 <input type="hidden" name="nonce" value="<%=pageNonce%>" >
  <jsp:getProperty name="clientshelper" property="form3" />
 <div class="formaction">
- <input type="submit" class="cancel" name="foo" value="<%=intl._("Cancel")%>" />
- <input type="submit" name="action" class="accept" value="<%=intl._("Save Plugin Configuration")%>" />
+ <input type="submit" class="cancel" name="foo" value="<%=intl._t("Cancel")%>" />
+ <input type="submit" name="action" class="accept" value="<%=intl._t("Save Plugin Configuration")%>" />
 </div></form></div>
 <%
        } // pluginUpdateEnabled
        if (clientshelper.isPluginInstallEnabled()) {
 %>
-<h3><a name="plugin"></a><%=intl._("Plugin Installation from URL")%></h3><p>
- <%=intl._("Look for available plugins on {0}.", "<a href=\"http://plugins.i2p\">plugins.i2p</a>")%>
- <%=intl._("To install a plugin, enter the download URL:")%>
+<h3><a name="plugin"></a><%=intl._t("Plugin Installation from URL")%></h3><p>
+ <%=intl._t("Look for available plugins on {0}.", "<a href=\"http://plugins.i2p\">plugins.i2p</a>")%>
+ <%=intl._t("To install a plugin, enter the download URL:")%>
  </p>
 <div class="wideload">
 <form action="configclients" method="POST">
@@ -133,31 +133,31 @@ input.default { width: 1px; height: 1px; visibility: hidden; }
 <p>
  <input type="text" size="60" name="pluginURL" >
  </p><hr><div class="formaction">
- <input type="submit" name="action" class="default" value="<%=intl._("Install Plugin")%>" />
- <input type="submit" class="cancel" name="foo" value="<%=intl._("Cancel")%>" />
- <input type="submit" name="action" class="download" value="<%=intl._("Install Plugin")%>" />
+ <input type="submit" name="action" class="default" value="<%=intl._t("Install Plugin")%>" />
+ <input type="submit" class="cancel" name="foo" value="<%=intl._t("Cancel")%>" />
+ <input type="submit" name="action" class="download" value="<%=intl._t("Install Plugin")%>" />
 </div></form></div>
 
 
 <div class="wideload">
-<h3><a name="plugin"></a><%=intl._("Plugin Installation from File")%></h3>
+<h3><a name="plugin"></a><%=intl._t("Plugin Installation from File")%></h3>
 <form action="configclients" method="POST" enctype="multipart/form-data" accept-charset="UTF-8">
 <input type="hidden" name="nonce" value="<%=pageNonce%>" >
-<p><%=intl._("Install plugin from file.")%>
-<br><%=intl._("Select xpi2p or su3 file")%> :
+<p><%=intl._t("Install plugin from file.")%>
+<br><%=intl._t("Select xpi2p or su3 file")%> :
 <input type="file" name="pluginFile" >
 </p><hr><div class="formaction">
-<input type="submit" name="action" class="download" value="<%=intl._("Install Plugin from File")%>" />
+<input type="submit" name="action" class="download" value="<%=intl._t("Install Plugin from File")%>" />
 </div></form></div>
 <%
        } // pluginInstallEnabled
        if (clientshelper.isPluginUpdateEnabled()) {
 %>
-<h3><a name="plugin"></a><%=intl._("Update All Plugins")%></h3>
+<h3><a name="plugin"></a><%=intl._t("Update All Plugins")%></h3>
 <div class="formaction">
 <form action="configclients" method="POST">
 <input type="hidden" name="nonce" value="<%=pageNonce%>" >
- <input type="submit" name="action" class="reload" value="<%=intl._("Update All Installed Plugins")%>" />
+ <input type="submit" name="action" class="reload" value="<%=intl._t("Update All Installed Plugins")%>" />
 </form></div>
 <%
        } // pluginUpdateEnabled
diff --git a/apps/routerconsole/jsp/confighome.jsp b/apps/routerconsole/jsp/confighome.jsp
index bf1f59d456..56be7b8bd0 100644
--- a/apps/routerconsole/jsp/confighome.jsp
+++ b/apps/routerconsole/jsp/confighome.jsp
@@ -17,7 +17,7 @@ input.default {
 </head><body onload="initAjax()">
 
 <%@include file="summary.jsi" %>
-<h1><%=intl._("I2P Home Page Configuration")%></h1>
+<h1><%=intl._t("I2P Home Page Configuration")%></h1>
 <div class="main" id="main">
 <%@include file="confignav.jsi" %>
 
@@ -26,60 +26,60 @@ input.default {
 <jsp:useBean class="net.i2p.router.web.HomeHelper" id="homehelper" scope="request" />
 <jsp:setProperty name="homehelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
 
-<h3><%=intl._("Default Home Page")%></h3>
+<h3><%=intl._t("Default Home Page")%></h3>
 <form action="" method="POST">
  <input type="hidden" name="nonce" value="<%=pageNonce%>" >
  <input type="hidden" name="group" value="0">
  <input type="checkbox" name="oldHome" <jsp:getProperty name="homehelper" property="configHome" /> >
- <%=intl._("Use old home page")%>
- <input type="submit" name="action" class="accept" value="<%=intl._("Save")%>" >
+ <%=intl._t("Use old home page")%>
+ <input type="submit" name="action" class="accept" value="<%=intl._t("Save")%>" >
 </form>
 
 <%
    if (homehelper.shouldShowSearch()) {
 %>
-<h3><%=intl._("Search Engines")%></h3>
+<h3><%=intl._t("Search Engines")%></h3>
 <form action="" method="POST">
  <input type="hidden" name="nonce" value="<%=pageNonce%>" >
  <input type="hidden" name="group" value="3">
  <jsp:getProperty name="homehelper" property="configSearch" />
  <div class="formaction">
-  <input type="submit" name="action" class="default" value="<%=intl._("Add item")%>" >
-  <input type="submit" name="action" class="delete" value="<%=intl._("Delete selected")%>" >
-  <input type="reset" class="cancel" value="<%=intl._("Cancel")%>" >
-  <input type="submit" name="action" class="reload" value="<%=intl._("Restore defaults")%>" >
-  <input type="submit" name="action" class="add" value="<%=intl._("Add item")%>" >
+  <input type="submit" name="action" class="default" value="<%=intl._t("Add item")%>" >
+  <input type="submit" name="action" class="delete" value="<%=intl._t("Delete selected")%>" >
+  <input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" >
+  <input type="submit" name="action" class="reload" value="<%=intl._t("Restore defaults")%>" >
+  <input type="submit" name="action" class="add" value="<%=intl._t("Add item")%>" >
  </div>
 </form>
 <%
    }  // shouldShowSearch()
 %>
 
-<h3><%=intl._("Hidden Services of Interest")%></h3>
+<h3><%=intl._t("Hidden Services of Interest")%></h3>
 <form action="" method="POST">
  <input type="hidden" name="nonce" value="<%=pageNonce%>" >
  <input type="hidden" name="group" value="1">
  <jsp:getProperty name="homehelper" property="configFavorites" />
  <div class="formaction">
-  <input type="submit" name="action" class="default" value="<%=intl._("Add item")%>" >
-  <input type="submit" name="action" class="delete" value="<%=intl._("Delete selected")%>" >
-  <input type="reset" class="cancel" value="<%=intl._("Cancel")%>" >
-  <input type="submit" name="action" class="reload" value="<%=intl._("Restore defaults")%>" >
-  <input type="submit" name="action" class="add" value="<%=intl._("Add item")%>" >
+  <input type="submit" name="action" class="default" value="<%=intl._t("Add item")%>" >
+  <input type="submit" name="action" class="delete" value="<%=intl._t("Delete selected")%>" >
+  <input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" >
+  <input type="submit" name="action" class="reload" value="<%=intl._t("Restore defaults")%>" >
+  <input type="submit" name="action" class="add" value="<%=intl._t("Add item")%>" >
  </div>
 </form>
 
-<h3><%=intl._("Applications and Configuration")%></h3>
+<h3><%=intl._t("Applications and Configuration")%></h3>
 <form action="" method="POST">
  <input type="hidden" name="nonce" value="<%=pageNonce%>" >
  <input type="hidden" name="group" value="2">
  <jsp:getProperty name="homehelper" property="configServices" />
  <div class="formaction">
-  <input type="submit" name="action" class="default" value="<%=intl._("Add item")%>" >
-  <input type="submit" name="action" class="delete" value="<%=intl._("Delete selected")%>" >
-  <input type="reset" class="cancel" value="<%=intl._("Cancel")%>" >
-  <input type="submit" name="action" class="reload" value="<%=intl._("Restore defaults")%>" >
-  <input type="submit" name="action" class="add" value="<%=intl._("Add item")%>" >
+  <input type="submit" name="action" class="default" value="<%=intl._t("Add item")%>" >
+  <input type="submit" name="action" class="delete" value="<%=intl._t("Delete selected")%>" >
+  <input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" >
+  <input type="submit" name="action" class="reload" value="<%=intl._t("Restore defaults")%>" >
+  <input type="submit" name="action" class="add" value="<%=intl._t("Add item")%>" >
  </div>
 </form>
 </div></body></html>
diff --git a/apps/routerconsole/jsp/configkeyring.jsp b/apps/routerconsole/jsp/configkeyring.jsp
index b2f5ef657c..3653a94790 100644
--- a/apps/routerconsole/jsp/configkeyring.jsp
+++ b/apps/routerconsole/jsp/configkeyring.jsp
@@ -10,7 +10,7 @@
 </head><body onload="initAjax()">
 
 <%@include file="summary.jsi" %>
-<h1><%=intl._("I2P Keyring Configuration")%></h1>
+<h1><%=intl._t("I2P Keyring Configuration")%></h1>
 <div class="main" id="main">
  <%@include file="confignav.jsi" %>
 
@@ -18,29 +18,29 @@
 <%@include file="formhandler.jsi" %>
  <jsp:useBean class="net.i2p.router.web.ConfigKeyringHelper" id="keyringhelper" scope="request" />
  <jsp:setProperty name="keyringhelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
-<div class="configure"><h2><%=intl._("Keyring")%></h2><p>
- <%=intl._("The router keyring is used to decrypt encrypted leaseSets.")%>
- <%=intl._("The keyring may contain keys for local or remote encrypted destinations.")%></p>
+<div class="configure"><h2><%=intl._t("Keyring")%></h2><p>
+ <%=intl._t("The router keyring is used to decrypt encrypted leaseSets.")%>
+ <%=intl._t("The keyring may contain keys for local or remote encrypted destinations.")%></p>
  <div class="wideload">
  <jsp:getProperty name="keyringhelper" property="summary" />
 </div>
 
  <form action="" method="POST">
  <input type="hidden" name="nonce" value="<%=pageNonce%>" >
- <h3><%=intl._("Manual Keyring Addition")%></h3><p>
- <%=intl._("Enter keys for encrypted remote destinations here.")%>
- <%=intl._("Keys for local destinations must be entered on the")%> <a href="i2ptunnel/"><%=intl._("I2PTunnel page")%></a>.
+ <h3><%=intl._t("Manual Keyring Addition")%></h3><p>
+ <%=intl._t("Enter keys for encrypted remote destinations here.")%>
+ <%=intl._t("Keys for local destinations must be entered on the")%> <a href="i2ptunnel/"><%=intl._t("I2PTunnel page")%></a>.
 </p>
   <div class="wideload">
       <table><tr>
-          <td class="mediumtags" align="right"><%=intl._("Dest. name, hash, or full key")%>:</td>
+          <td class="mediumtags" align="right"><%=intl._t("Dest. name, hash, or full key")%>:</td>
           <td><textarea name="peer" cols="44" rows="1" style="height: 3em;" wrap="off" spellcheck="false"></textarea></td>
         </tr><tr>
-          <td class="mediumtags" align="right"><%=intl._("Encryption Key")%>:</td>
+          <td class="mediumtags" align="right"><%=intl._t("Encryption Key")%>:</td>
           <td><input type="text" size="55" name="key" ></td>
         </tr><tr>
           <td align="right" colspan="2">
-<input type="reset" class="cancel" value="<%=intl._("Cancel")%>" >
-<input type="submit" name="action" class="delete" value="<%=intl._("Delete key")%>" >
-<input type="submit" name="action" class="add" value="<%=intl._("Add key")%>" >
+<input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" >
+<input type="submit" name="action" class="delete" value="<%=intl._t("Delete key")%>" >
+<input type="submit" name="action" class="add" value="<%=intl._t("Add key")%>" >
 </td></tr></table></div></form></div></div></body></html>
diff --git a/apps/routerconsole/jsp/configlogging.jsp b/apps/routerconsole/jsp/configlogging.jsp
index 9e3be5cc76..84f10ac806 100644
--- a/apps/routerconsole/jsp/configlogging.jsp
+++ b/apps/routerconsole/jsp/configlogging.jsp
@@ -13,7 +13,7 @@
 <jsp:setProperty name="logginghelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
 
 <%@include file="summary.jsi" %>
-<h1><%=intl._("I2P Logging Configuration")%></h1>
+<h1><%=intl._t("I2P Logging Configuration")%></h1>
 <div class="main" id="main">
  <%@include file="confignav.jsi" %>
 
@@ -23,31 +23,31 @@
  <form action="" method="POST">
  <input type="hidden" name="nonce" value="<%=pageNonce%>" >
  <input type="hidden" name="action" value="blah" >
- <h3><%=intl._("Configure I2P Logging Options")%></h3>
+ <h3><%=intl._t("Configure I2P Logging Options")%></h3>
  <div class="wideload">
       <table border="0" cellspacing="5">
-        <tr><td class="mediumtags" align="right"><b><%=intl._("Log file")%>:</b></td>
-          <td><input type="text" name="logfilename" size="40" disabled="disabled" title="<%=intl._("Edit {0} to change", "logger.config")%>" value="<jsp:getProperty name="logginghelper" property="logFilePattern" />" >
-            <br> <i><%=intl._("(the symbol '@' will be replaced during log rotation)")%></i></td>
-        </tr><tr><td class="mediumtags" align="right"><b><%=intl._("Log record format")%>:</b></td>
+        <tr><td class="mediumtags" align="right"><b><%=intl._t("Log file")%>:</b></td>
+          <td><input type="text" name="logfilename" size="40" disabled="disabled" title="<%=intl._t("Edit {0} to change", "logger.config")%>" value="<jsp:getProperty name="logginghelper" property="logFilePattern" />" >
+            <br> <i><%=intl._t("(the symbol '@' will be replaced during log rotation)")%></i></td>
+        </tr><tr><td class="mediumtags" align="right"><b><%=intl._t("Log record format")%>:</b></td>
           <td><input type="text" name="logformat" size="20" value="<jsp:getProperty name="logginghelper" property="recordPattern" />" >
-            <br> <i><%=intl._("(use 'd' = date, 'c' = class, 't' = thread, 'p' = priority, 'm' = message)")%>
+            <br> <i><%=intl._t("(use 'd' = date, 'c' = class, 't' = thread, 'p' = priority, 'm' = message)")%>
             </i></td>
-        </tr><tr><td class="mediumtags" align="right"><b><%=intl._("Log date format")%>:</b></td>
+        </tr><tr><td class="mediumtags" align="right"><b><%=intl._t("Log date format")%>:</b></td>
           <td><input type="text" name="logdateformat" size="20" value="<jsp:getProperty name="logginghelper" property="datePattern" />" >
-            <br> <i><%=intl._("('MM' = month, 'dd' = day, 'HH' = hour, 'mm' = minute, 'ss' = second, 'SSS' = millisecond)")%>
+            <br> <i><%=intl._t("('MM' = month, 'dd' = day, 'HH' = hour, 'mm' = minute, 'ss' = second, 'SSS' = millisecond)")%>
             </i></td>
-        </tr><tr><td class="mediumtags" align="right"><b><%=intl._("Max log file size")%>:</b></td>
+        </tr><tr><td class="mediumtags" align="right"><b><%=intl._t("Max log file size")%>:</b></td>
           <td><input type="text" name="logfilesize" size="10" value="<jsp:getProperty name="logginghelper" property="maxFileSize" />" ><br></td>
-        </tr><tr><td class="mediumtags" align="right"><b><%=intl._("Default log level")%>:</b></td>
-          <td><jsp:getProperty name="logginghelper" property="defaultLogLevelBox" /><br><i><%=intl._("(DEBUG and INFO are not recommended defaults, as they will drastically slow down your router)")%>
+        </tr><tr><td class="mediumtags" align="right"><b><%=intl._t("Default log level")%>:</b></td>
+          <td><jsp:getProperty name="logginghelper" property="defaultLogLevelBox" /><br><i><%=intl._t("(DEBUG and INFO are not recommended defaults, as they will drastically slow down your router)")%>
           </i></td>
-        </tr><tr><td class="mediumtags" align="right"><b><%=intl._("Log level overrides")%>:</b></td>
+        </tr><tr><td class="mediumtags" align="right"><b><%=intl._t("Log level overrides")%>:</b></td>
           <td><jsp:getProperty name="logginghelper" property="logLevelTable" /></td>
-        </tr><tr><td class="mediumtags" align="right"><b><%=intl._("New override")%>:</b></td>
+        </tr><tr><td class="mediumtags" align="right"><b><%=intl._t("New override")%>:</b></td>
           <td><jsp:getProperty name="logginghelper" property="newClassBox" /></td>
         </tr><tr><td colspan="2"><hr></td>
         </tr><tr class="tablefooter"><td colspan="2"> <div class="formaction">
-          <input type="reset" class="cancel" value="<%=intl._("Cancel")%>" >
-          <input type="submit" name="shouldsave" class="accept" value="<%=intl._("Save changes")%>" >
+          <input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" >
+          <input type="submit" name="shouldsave" class="accept" value="<%=intl._t("Save changes")%>" >
 </div></td></tr></table></div></form></div></div></body></html>
diff --git a/apps/routerconsole/jsp/confignet.jsp b/apps/routerconsole/jsp/confignet.jsp
index 27fdfef7ef..7b81518e34 100644
--- a/apps/routerconsole/jsp/confignet.jsp
+++ b/apps/routerconsole/jsp/confignet.jsp
@@ -13,7 +13,7 @@
 
 <jsp:useBean class="net.i2p.router.web.ConfigNetHelper" id="nethelper" scope="request" />
 <jsp:setProperty name="nethelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
-<h1><%=intl._("I2P Network Configuration")%></h1>
+<h1><%=intl._t("I2P Network Configuration")%></h1>
 <div class="main" id="main">
  <%@include file="confignav.jsi" %>
 
@@ -23,55 +23,55 @@
  <form action="" method="POST">
  <input type="hidden" name="nonce" value="<%=pageNonce%>" >
  <input type="hidden" name="action" value="blah" >
- <h3><%=intl._("IP and Transport Configuration")%></h3><p>
+ <h3><%=intl._t("IP and Transport Configuration")%></h3><p>
  <img src="/themes/console/images/itoopie_xsm.png" alt="">
- <b><%=intl._("The default settings will work for most people.")%>
- <a href="#chelp"><%=intl._("There is help below.")%></a></b>
- </p><p><b><%=intl._("UPnP Configuration")%>:</b><br>
+ <b><%=intl._t("The default settings will work for most people.")%>
+ <a href="#chelp"><%=intl._t("There is help below.")%></a></b>
+ </p><p><b><%=intl._t("UPnP Configuration")%>:</b><br>
     <input type="checkbox" class="optbox" name="upnp" value="true" <jsp:getProperty name="nethelper" property="upnpChecked" /> >
-    <%=intl._("Enable UPnP to open firewall ports")%> - <a href="peers#upnp"><%=intl._("UPnP status")%></a>
- </p><p><b><%=intl._("IP Configuration")%>:</b><br>
- <%=intl._("Externally reachable hostname or IP address")%>:<br>
+    <%=intl._t("Enable UPnP to open firewall ports")%> - <a href="peers#upnp"><%=intl._t("UPnP status")%></a>
+ </p><p><b><%=intl._t("IP Configuration")%>:</b><br>
+ <%=intl._t("Externally reachable hostname or IP address")%>:<br>
     <input type="radio" class="optbox" name="udpAutoIP" value="local,upnp,ssu" <%=nethelper.getUdpAutoIPChecked(3) %> >
-    <%=intl._("Use all auto-detect methods")%><br>
+    <%=intl._t("Use all auto-detect methods")%><br>
     <input type="radio" class="optbox" name="udpAutoIP" value="local,ssu" <%=nethelper.getUdpAutoIPChecked(4) %> >
-    <%=intl._("Disable UPnP IP address detection")%><br>
+    <%=intl._t("Disable UPnP IP address detection")%><br>
     <input type="radio" class="optbox" name="udpAutoIP" value="upnp,ssu" <%=nethelper.getUdpAutoIPChecked(5) %> >
-    <%=intl._("Ignore local interface IP address")%><br>
+    <%=intl._t("Ignore local interface IP address")%><br>
     <input type="radio" class="optbox" name="udpAutoIP" value="ssu" <%=nethelper.getUdpAutoIPChecked(0) %> >
-    <%=intl._("Use SSU IP address detection only")%><br>
+    <%=intl._t("Use SSU IP address detection only")%><br>
     <input type="radio" class="optbox" name="udpAutoIP" value="hidden" <%=nethelper.getUdpAutoIPChecked(2) %> >
-    <%=intl._("Hidden mode - do not publish IP")%> <i><%=intl._("(prevents participating traffic)")%></i><br>
+    <%=intl._t("Hidden mode - do not publish IP")%> <i><%=intl._t("(prevents participating traffic)")%></i><br>
     <input type="radio" class="optbox" name="udpAutoIP" value="fixed" <%=nethelper.getUdpAutoIPChecked(1) %> >
-    <%=intl._("Specify hostname or IP")%>:<br>
+    <%=intl._t("Specify hostname or IP")%>:<br>
     <%=nethelper.getAddressSelector() %>
  </p><p>
- <%=intl._("Action when IP changes")%>:<br>
+ <%=intl._t("Action when IP changes")%>:<br>
     <input type="checkbox" class="optbox" name="laptop" value="true" <jsp:getProperty name="nethelper" property="laptopChecked" /> >
-    <%=intl._("Laptop mode - Change router identity and UDP port when IP changes for enhanced anonymity")%>
-    (<i><%=intl._("Experimental")%></i>)
+    <%=intl._t("Laptop mode - Change router identity and UDP port when IP changes for enhanced anonymity")%>
+    (<i><%=intl._t("Experimental")%></i>)
  </p><p>
- <%=intl._("IPv4 Configuration")%>:<br>
+ <%=intl._t("IPv4 Configuration")%>:<br>
     <input type="checkbox" class="optbox" name="IPv4Firewalled" value="true" <jsp:getProperty name="nethelper" property="IPv4FirewalledChecked" /> >
-    <%=intl._("Disable inbound (Firewalled by Carrier-grade NAT or DS-Lite)")%>
+    <%=intl._t("Disable inbound (Firewalled by Carrier-grade NAT or DS-Lite)")%>
  </p><p>
- <%=intl._("IPv6 Configuration")%>:<br>
+ <%=intl._t("IPv6 Configuration")%>:<br>
     <input type="radio" class="optbox" name="ipv6" value="false" <%=nethelper.getIPv6Checked("false") %> >
-    <%=intl._("Disable IPv6")%><br>
+    <%=intl._t("Disable IPv6")%><br>
     <input type="radio" class="optbox" name="ipv6" value="enable" <%=nethelper.getIPv6Checked("enable") %> >
-    <%=intl._("Enable IPv6")%><br>
+    <%=intl._t("Enable IPv6")%><br>
     <input type="radio" class="optbox" name="ipv6" value="preferIPv4" <%=nethelper.getIPv6Checked("preferIPv4") %> >
-    <%=intl._("Prefer IPv4 over IPv6")%><br>
+    <%=intl._t("Prefer IPv4 over IPv6")%><br>
     <input type="radio" class="optbox" name="ipv6" value="preferIPv6" <%=nethelper.getIPv6Checked("preferIPv6") %> >
-    <%=intl._("Prefer IPv6 over IPv4")%><br>
+    <%=intl._t("Prefer IPv6 over IPv4")%><br>
     <input type="radio" class="optbox" name="ipv6" value="only" <%=nethelper.getIPv6Checked("only") %> >
-    <%=intl._("Use IPv6 only (disable IPv4)")%>
-    (<i><%=intl._("Experimental")%></i>)<br>
- </p><p><b><%=intl._("UDP Configuration:")%></b><br>
- <%=intl._("UDP port:")%>
+    <%=intl._t("Use IPv6 only (disable IPv4)")%>
+    (<i><%=intl._t("Experimental")%></i>)<br>
+ </p><p><b><%=intl._t("UDP Configuration:")%></b><br>
+ <%=intl._t("UDP port:")%>
  <input name ="udpPort" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="configuredUdpPort" />" ><br>
  <input type="checkbox" class="optbox" name="disableUDP" value="disabled" <%=nethelper.getUdpDisabledChecked() %> >
- <%=intl._("Completely disable")%> <i><%=intl._("(select only if behind a firewall that blocks outbound UDP)")%></i><br>
+ <%=intl._t("Completely disable")%> <i><%=intl._t("(select only if behind a firewall that blocks outbound UDP)")%></i><br>
 <% /********
 <!-- let's keep this simple...
 <input type="checkbox" class="optbox" name="requireIntroductions" value="true" <jsp:getProperty name="nethelper" property="requireIntroductionsChecked" /> />
@@ -82,40 +82,40 @@
 -->
 *********/ %>
  </p><p>
- <b><%=intl._("TCP Configuration")%>:</b><br>
- <%=intl._("Externally reachable hostname or IP address")%>:<br>
+ <b><%=intl._t("TCP Configuration")%>:</b><br>
+ <%=intl._t("Externally reachable hostname or IP address")%>:<br>
     <input type="radio" class="optbox" name="ntcpAutoIP" value="true" <%=nethelper.getTcpAutoIPChecked(2) %> >
-    <%=intl._("Use auto-detected IP address")%>
-    <i>(<%=intl._("currently")%> <jsp:getProperty name="nethelper" property="udpIP" />)</i>
-    <%=intl._("if we are not firewalled")%><br>
+    <%=intl._t("Use auto-detected IP address")%>
+    <i>(<%=intl._t("currently")%> <jsp:getProperty name="nethelper" property="udpIP" />)</i>
+    <%=intl._t("if we are not firewalled")%><br>
     <input type="radio" class="optbox" name="ntcpAutoIP" value="always" <%=nethelper.getTcpAutoIPChecked(3) %> >
-    <%=intl._("Always use auto-detected IP address (Not firewalled)")%><br>
+    <%=intl._t("Always use auto-detected IP address (Not firewalled)")%><br>
     <input type="radio" class="optbox" name="ntcpAutoIP" value="false" <%=nethelper.getTcpAutoIPChecked(1) %> >
-    <%=intl._("Specify hostname or IP")%>:
+    <%=intl._t("Specify hostname or IP")%>:
     <input name ="ntcphost" type="text" size="16" value="<jsp:getProperty name="nethelper" property="ntcphostname" />" ><br>
     <input type="radio" class="optbox" name="ntcpAutoIP" value="false" <%=nethelper.getTcpAutoIPChecked(0) %> >
-    <%=intl._("Disable inbound (Firewalled)")%><br>
+    <%=intl._t("Disable inbound (Firewalled)")%><br>
     <input type="radio" class="optbox" name="ntcpAutoIP" value="disabled" <%=nethelper.getTcpAutoIPChecked(4) %> >
-    <%=intl._("Completely disable")%> <i><%=intl._("(select only if behind a firewall that throttles or blocks outbound TCP)")%></i><br>
+    <%=intl._t("Completely disable")%> <i><%=intl._t("(select only if behind a firewall that throttles or blocks outbound TCP)")%></i><br>
  </p><p>
- <%=intl._("Externally reachable TCP port")%>:<br>
+ <%=intl._t("Externally reachable TCP port")%>:<br>
     <input type="radio" class="optbox" name="ntcpAutoPort" value="2" <%=nethelper.getTcpAutoPortChecked(2) %> >
-    <%=intl._("Use the same port configured for UDP")%>
-    <i>(<%=intl._("currently")%> <jsp:getProperty name="nethelper" property="udpPort" />)</i><br>
+    <%=intl._t("Use the same port configured for UDP")%>
+    <i>(<%=intl._t("currently")%> <jsp:getProperty name="nethelper" property="udpPort" />)</i><br>
     <input type="radio" class="optbox" name="ntcpAutoPort" value="1" <%=nethelper.getTcpAutoPortChecked(1) %> >
-    <%=intl._("Specify Port")%>:
+    <%=intl._t("Specify Port")%>:
     <input name ="ntcpport" type="text" size="5" maxlength="5" value="<jsp:getProperty name="nethelper" property="ntcpport" />" ><br>
- </p><p><b><%=intl._("Notes")%>: <%=intl._("a) Do not reveal your port numbers to anyone!   b) Changing these settings will restart your router.")%></b></p>
+ </p><p><b><%=intl._t("Notes")%>: <%=intl._t("a) Do not reveal your port numbers to anyone!   b) Changing these settings will restart your router.")%></b></p>
 <hr><div class="formaction">
-<input type="reset" class="cancel" value="<%=intl._("Cancel")%>" >
-<input type="submit" class="accept" name="save" value="<%=intl._("Save changes")%>" >
-</div><h3><a name="chelp"><%=intl._("Configuration Help")%>:</a></h3><div align="justify"><p>
- <%=intl._("While I2P will work fine behind most firewalls, your speeds and network integration will generally improve if the I2P port is forwarded for both UDP and TCP.")%>
+<input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" >
+<input type="submit" class="accept" name="save" value="<%=intl._t("Save changes")%>" >
+</div><h3><a name="chelp"><%=intl._t("Configuration Help")%>:</a></h3><div align="justify"><p>
+ <%=intl._t("While I2P will work fine behind most firewalls, your speeds and network integration will generally improve if the I2P port is forwarded for both UDP and TCP.")%>
  </p><p>
- <%=intl._("If you can, please poke a hole in your firewall to allow unsolicited UDP and TCP packets to reach you.")%>
-   <%=intl._("If you can't, I2P supports UPnP (Universal Plug and Play) and UDP hole punching with \"SSU introductions\" to relay traffic.")%>
-   <%=intl._("Most of the options above are for special situations, for example where UPnP does not work correctly, or a firewall not under your control is doing harm.")%> 
-   <%=intl._("Certain firewalls such as symmetric NATs may not work well with I2P.")%>
+ <%=intl._t("If you can, please poke a hole in your firewall to allow unsolicited UDP and TCP packets to reach you.")%>
+   <%=intl._t("If you can't, I2P supports UPnP (Universal Plug and Play) and UDP hole punching with \"SSU introductions\" to relay traffic.")%>
+   <%=intl._t("Most of the options above are for special situations, for example where UPnP does not work correctly, or a firewall not under your control is doing harm.")%> 
+   <%=intl._t("Certain firewalls such as symmetric NATs may not work well with I2P.")%>
  </p>
 <% /********
 <!-- let's keep this simple...
@@ -124,81 +124,81 @@
 -->
 *********/ %>
 <p>
- <%=intl._("UPnP is used to communicate with Internet Gateway Devices (IGDs) to detect the external IP address and forward ports.")%>
-   <%=intl._("UPnP support is beta, and may not work for any number of reasons")%>:
+ <%=intl._t("UPnP is used to communicate with Internet Gateway Devices (IGDs) to detect the external IP address and forward ports.")%>
+   <%=intl._t("UPnP support is beta, and may not work for any number of reasons")%>:
 </p>
 <ul>
-<li class="tidylist"><%=intl._("No UPnP-compatible device present")%>
-<li class="tidylist"><%=intl._("UPnP disabled on the device")%>
-<li class="tidylist"><%=intl._("Software firewall interference with UPnP")%>
-<li class="tidylist"><%=intl._("Bugs in the device's UPnP implementation")%>
-<li class="tidylist"><%=intl._("Multiple firewall/routers in the internet connection path")%>
-<li class="tidylist"><%=intl._("UPnP device change, reset, or address change")%>
+<li class="tidylist"><%=intl._t("No UPnP-compatible device present")%>
+<li class="tidylist"><%=intl._t("UPnP disabled on the device")%>
+<li class="tidylist"><%=intl._t("Software firewall interference with UPnP")%>
+<li class="tidylist"><%=intl._t("Bugs in the device's UPnP implementation")%>
+<li class="tidylist"><%=intl._t("Multiple firewall/routers in the internet connection path")%>
+<li class="tidylist"><%=intl._t("UPnP device change, reset, or address change")%>
 </ul>
-<p><a href="peers#upnp"><%=intl._("Review the UPnP status here.")%></a>
-<%=intl._("UPnP may be enabled or disabled above, but a change requires a router restart to take effect.")%></p>
-<p><%=intl._("Hostnames entered above will be published in the network database.")%>
-    <%=intl._("They are <b>not private</b>.")%>
-    <%=intl._("Also, <b>do not enter a private IP address</b> like 127.0.0.1 or 192.168.1.1.")%>
-    <%=intl._("If you specify the wrong IP address or hostname, or do not properly configure your NAT or firewall, your network performance will degrade substantially.")%>
-    <%=intl._("When in doubt, leave the settings at the defaults.")%>
+<p><a href="peers#upnp"><%=intl._t("Review the UPnP status here.")%></a>
+<%=intl._t("UPnP may be enabled or disabled above, but a change requires a router restart to take effect.")%></p>
+<p><%=intl._t("Hostnames entered above will be published in the network database.")%>
+    <%=intl._t("They are <b>not private</b>.")%>
+    <%=intl._t("Also, <b>do not enter a private IP address</b> like 127.0.0.1 or 192.168.1.1.")%>
+    <%=intl._t("If you specify the wrong IP address or hostname, or do not properly configure your NAT or firewall, your network performance will degrade substantially.")%>
+    <%=intl._t("When in doubt, leave the settings at the defaults.")%>
 </p>
-<h3><a name="help"><%=intl._("Reachability Help")%>:</a></h3><p>
- <%=intl._("While I2P will work fine behind most firewalls, your speeds and network integration will generally improve if the I2P port is forwarded for both UDP and TCP.")%>
- <%=intl._("If you think you have opened up your firewall and I2P still thinks you are firewalled, remember that you may have multiple firewalls, for example both software packages and external hardware routers.")%>
- <%=intl._("If there is an error, the <a href=\"logs.jsp\">logs</a> may also help diagnose the problem.")%>
+<h3><a name="help"><%=intl._t("Reachability Help")%>:</a></h3><p>
+ <%=intl._t("While I2P will work fine behind most firewalls, your speeds and network integration will generally improve if the I2P port is forwarded for both UDP and TCP.")%>
+ <%=intl._t("If you think you have opened up your firewall and I2P still thinks you are firewalled, remember that you may have multiple firewalls, for example both software packages and external hardware routers.")%>
+ <%=intl._t("If there is an error, the <a href=\"logs.jsp\">logs</a> may also help diagnose the problem.")%>
 </p>
  <ul>
-<li class="tidylist"><b><%=intl._("OK")%></b> - 
-     <%=intl._("Your UDP port does not appear to be firewalled.")%>
-<li class="tidylist"><b><%=intl._("Firewalled")%></b> - 
-     <%=intl._("Your UDP port appears to be firewalled.")%>
-     <%=intl._("As the firewall detection methods are not 100% reliable, this may occasionally be displayed in error.")%>
-     <%=intl._("However, if it appears consistently, you should check whether both your external and internal firewalls are open for your port.")%> 
-     <%=intl._("I2P will work fine when firewalled, there is no reason for concern. When firewalled, the router uses \"introducers\" to relay inbound connections.")%>
-     <%=intl._("However, you will get more participating traffic and help the network more if you can open your firewall(s).")%>
-     <%=intl._("If you think you have already done so, remember that you may have both a hardware and a software firewall, or be behind an additional, institutional firewall you cannot control.")%>
-     <%=intl._("Also, some routers cannot correctly forward both TCP and UDP on a single port, or may have other limitations or bugs that prevent them from passing traffic through to I2P.")%>
-<li class="tidylist"><b><%=intl._("Testing")%></b> - 
-     <%=intl._("The router is currently testing whether your UDP port is firewalled.")%>
-<li class="tidylist"><b><%=intl._("Hidden")%></b> - 
-     <%=intl._("The router is not configured to publish its address, therefore it does not expect incoming connections.")%>
-     <%=intl._("Hidden mode is automatically enabled for added protection in certain countries.")%>
-<li class="tidylist"><b><%=intl._("WARN - Firewalled and Fast")%></b> - 
-     <%=intl._("You have configured I2P to share more than 128KBps of bandwidth, but you are firewalled.")%>
-     <%=intl._("While I2P will work fine in this configuration, if you really have over 128KBps of bandwidth to share, it will be much more helpful to the network if you open your firewall.")%>
-<li class="tidylist"><b><%=intl._("WARN - Firewalled and Floodfill")%></b> - 
-     <%=intl._("You have configured I2P to be a floodfill router, but you are firewalled.")%> 
-     <%=intl._("For best participation as a floodfill router, you should open your firewall.")%>
-<li class="tidylist"><b><%=intl._("WARN - Firewalled with Inbound TCP Enabled")%></b> - 
-     <%=intl._("You have configured inbound TCP, however your UDP port is firewalled, and therefore it is likely that your TCP port is firewalled as well.")%>
-     <%=intl._("If your TCP port is firewalled with inbound TCP enabled, routers will not be able to contact you via TCP, which will hurt the network.")%> 
-     <%=intl._("Please open your firewall or disable inbound TCP above.")%>
-<li class="tidylist"><b><%=intl._("WARN - Firewalled with UDP Disabled")%></b> -
-     <%=intl._("You have configured inbound TCP, however you have disabled UDP.")%> 
-     <%=intl._("You appear to be firewalled on TCP, therefore your router cannot accept inbound connections.")%>
-     <%=intl._("Please open your firewall or enable UDP.")%>
-<li class="tidylist"><b><%=intl._("ERR - Clock Skew")%></b> - 
-     <%=intl._("Your system's clock is skewed, which will make it difficult to participate in the network.")%> 
-     <%=intl._("Correct your clock setting if this error persists.")%>
-<li class="tidylist"><b><%=intl._("ERR - Private TCP Address")%></b> - 
-     <%=intl._("You must never advertise an unroutable IP address such as 127.0.0.1 or 192.168.1.1 as your external address.")%> 
-     <%=intl._("Correct the address or disable inbound TCP above.")%>
-<li class="tidylist"><b><%=intl._("ERR - SymmetricNAT")%></b> - 
-     <%=intl._("I2P detected that you are firewalled by a Symmetric NAT.")%>
-     <%=intl._("I2P does not work well behind this type of firewall. You will probably not be able to accept inbound connections, which will limit your participation in the network.")%>
-<li class="tidylist"><b><%=intl._("ERR - UDP Port In Use - Set i2np.udp.internalPort=xxxx in advanced config and restart")%></b> -
-     <%=intl._("I2P was unable to bind to the configured port noted on the advanced network configuration page .")%>
-     <%=intl._("Check to see if another program is using the configured port. If so, stop that program or configure I2P to use a different port.")%> 
-     <%=intl._("This may be a transient error, if the other program is no longer using the port.")%> 
-     <%=intl._("However, a restart is always required after this error.")%>
-<li class="tidylist"><b><%=intl._("ERR - UDP Disabled and Inbound TCP host/port not set")%></b> -
-     <%=intl._("You have not configured inbound TCP with a hostname and port above, however you have disabled UDP.")%> 
-     <%=intl._("Therefore your router cannot accept inbound connections.")%>
-     <%=intl._("Please configure a TCP host and port above or enable UDP.")%>
-<li class="tidylist"><b><%=intl._("ERR - Client Manager I2CP Error - check logs")%></b> -
-     <%=intl._("This is usually due to a port 7654 conflict. Check the logs to verify.")%> 
-     <%=intl._("Do you have another I2P instance running? Stop the conflicting program and restart I2P.")%>
+<li class="tidylist"><b><%=intl._t("OK")%></b> - 
+     <%=intl._t("Your UDP port does not appear to be firewalled.")%>
+<li class="tidylist"><b><%=intl._t("Firewalled")%></b> - 
+     <%=intl._t("Your UDP port appears to be firewalled.")%>
+     <%=intl._t("As the firewall detection methods are not 100% reliable, this may occasionally be displayed in error.")%>
+     <%=intl._t("However, if it appears consistently, you should check whether both your external and internal firewalls are open for your port.")%> 
+     <%=intl._t("I2P will work fine when firewalled, there is no reason for concern. When firewalled, the router uses \"introducers\" to relay inbound connections.")%>
+     <%=intl._t("However, you will get more participating traffic and help the network more if you can open your firewall(s).")%>
+     <%=intl._t("If you think you have already done so, remember that you may have both a hardware and a software firewall, or be behind an additional, institutional firewall you cannot control.")%>
+     <%=intl._t("Also, some routers cannot correctly forward both TCP and UDP on a single port, or may have other limitations or bugs that prevent them from passing traffic through to I2P.")%>
+<li class="tidylist"><b><%=intl._t("Testing")%></b> - 
+     <%=intl._t("The router is currently testing whether your UDP port is firewalled.")%>
+<li class="tidylist"><b><%=intl._t("Hidden")%></b> - 
+     <%=intl._t("The router is not configured to publish its address, therefore it does not expect incoming connections.")%>
+     <%=intl._t("Hidden mode is automatically enabled for added protection in certain countries.")%>
+<li class="tidylist"><b><%=intl._t("WARN - Firewalled and Fast")%></b> - 
+     <%=intl._t("You have configured I2P to share more than 128KBps of bandwidth, but you are firewalled.")%>
+     <%=intl._t("While I2P will work fine in this configuration, if you really have over 128KBps of bandwidth to share, it will be much more helpful to the network if you open your firewall.")%>
+<li class="tidylist"><b><%=intl._t("WARN - Firewalled and Floodfill")%></b> - 
+     <%=intl._t("You have configured I2P to be a floodfill router, but you are firewalled.")%> 
+     <%=intl._t("For best participation as a floodfill router, you should open your firewall.")%>
+<li class="tidylist"><b><%=intl._t("WARN - Firewalled with Inbound TCP Enabled")%></b> - 
+     <%=intl._t("You have configured inbound TCP, however your UDP port is firewalled, and therefore it is likely that your TCP port is firewalled as well.")%>
+     <%=intl._t("If your TCP port is firewalled with inbound TCP enabled, routers will not be able to contact you via TCP, which will hurt the network.")%> 
+     <%=intl._t("Please open your firewall or disable inbound TCP above.")%>
+<li class="tidylist"><b><%=intl._t("WARN - Firewalled with UDP Disabled")%></b> -
+     <%=intl._t("You have configured inbound TCP, however you have disabled UDP.")%> 
+     <%=intl._t("You appear to be firewalled on TCP, therefore your router cannot accept inbound connections.")%>
+     <%=intl._t("Please open your firewall or enable UDP.")%>
+<li class="tidylist"><b><%=intl._t("ERR - Clock Skew")%></b> - 
+     <%=intl._t("Your system's clock is skewed, which will make it difficult to participate in the network.")%> 
+     <%=intl._t("Correct your clock setting if this error persists.")%>
+<li class="tidylist"><b><%=intl._t("ERR - Private TCP Address")%></b> - 
+     <%=intl._t("You must never advertise an unroutable IP address such as 127.0.0.1 or 192.168.1.1 as your external address.")%> 
+     <%=intl._t("Correct the address or disable inbound TCP above.")%>
+<li class="tidylist"><b><%=intl._t("ERR - SymmetricNAT")%></b> - 
+     <%=intl._t("I2P detected that you are firewalled by a Symmetric NAT.")%>
+     <%=intl._t("I2P does not work well behind this type of firewall. You will probably not be able to accept inbound connections, which will limit your participation in the network.")%>
+<li class="tidylist"><b><%=intl._t("ERR - UDP Port In Use - Set i2np.udp.internalPort=xxxx in advanced config and restart")%></b> -
+     <%=intl._t("I2P was unable to bind to the configured port noted on the advanced network configuration page .")%>
+     <%=intl._t("Check to see if another program is using the configured port. If so, stop that program or configure I2P to use a different port.")%> 
+     <%=intl._t("This may be a transient error, if the other program is no longer using the port.")%> 
+     <%=intl._t("However, a restart is always required after this error.")%>
+<li class="tidylist"><b><%=intl._t("ERR - UDP Disabled and Inbound TCP host/port not set")%></b> -
+     <%=intl._t("You have not configured inbound TCP with a hostname and port above, however you have disabled UDP.")%> 
+     <%=intl._t("Therefore your router cannot accept inbound connections.")%>
+     <%=intl._t("Please configure a TCP host and port above or enable UDP.")%>
+<li class="tidylist"><b><%=intl._t("ERR - Client Manager I2CP Error - check logs")%></b> -
+     <%=intl._t("This is usually due to a port 7654 conflict. Check the logs to verify.")%> 
+     <%=intl._t("Do you have another I2P instance running? Stop the conflicting program and restart I2P.")%>
  </ul><hr>
 <% /********
       <!--
diff --git a/apps/routerconsole/jsp/configpeer.jsp b/apps/routerconsole/jsp/configpeer.jsp
index 4e4010ecac..5a9cfcae75 100644
--- a/apps/routerconsole/jsp/configpeer.jsp
+++ b/apps/routerconsole/jsp/configpeer.jsp
@@ -10,7 +10,7 @@
 </head><body onload="initAjax()">
 
 <%@include file="summary.jsi" %>
-<h1><%=intl._("I2P Peer Configuration")%></h1>
+<h1><%=intl._t("I2P Peer Configuration")%></h1>
 <div class="main" id="main">
  <%@include file="confignav.jsi" %>
 
@@ -29,38 +29,38 @@
  <a name="sh"> </a>
  <a name="unsh"> </a>
  <a name="bonus"> </a>
- <h2><%=intl._("Manual Peer Controls")%></h2>
- <div class="mediumtags"><p><%=intl._("Router Hash")%>:
+ <h2><%=intl._t("Manual Peer Controls")%></h2>
+ <div class="mediumtags"><p><%=intl._t("Router Hash")%>:
 <input type="text" size="55" name="peer" value="<%=peer%>" /></p></div>
- <h3><%=intl._("Manually Ban / Unban a Peer")%></h3>
- <p><%=intl._("Banning will prevent the participation of this peer in tunnels you create.")%></p>
+ <h3><%=intl._t("Manually Ban / Unban a Peer")%></h3>
+ <p><%=intl._t("Banning will prevent the participation of this peer in tunnels you create.")%></p>
       <div class="formaction">
-        <input type="submit" name="action" class="delete" value="<%=intl._("Ban peer until restart")%>" />
-        <input type="submit" name="action" class="accept" value="<%=intl._("Unban peer")%>" />
+        <input type="submit" name="action" class="delete" value="<%=intl._t("Ban peer until restart")%>" />
+        <input type="submit" name="action" class="accept" value="<%=intl._t("Unban peer")%>" />
         <% if (! "".equals(peer)) { %>
         <!-- <font color="blue">&lt;---- click to verify action</font> -->
         <% } %>
       </div>
 
- <h3><%=intl._("Adjust Profile Bonuses")%></h3>
- <p><%=intl._("Bonuses may be positive or negative, and affect the peer's inclusion in Fast and High Capacity tiers. Fast peers are used for client tunnels, and High Capacity peers are used for some exploratory tunnels. Current bonuses are displayed on the")%> <a href="profiles"><%=intl._("profiles page")%></a>.</p>
+ <h3><%=intl._t("Adjust Profile Bonuses")%></h3>
+ <p><%=intl._t("Bonuses may be positive or negative, and affect the peer's inclusion in Fast and High Capacity tiers. Fast peers are used for client tunnels, and High Capacity peers are used for some exploratory tunnels. Current bonuses are displayed on the")%> <a href="profiles"><%=intl._t("profiles page")%></a>.</p>
  <% long speed = 0; long capacity = 0;
     if (! "".equals(peer)) {
         // get existing bonus values?
     }
  %>
- <div class="mediumtags"><p><%=intl._("Speed")%>:
+ <div class="mediumtags"><p><%=intl._t("Speed")%>:
  <input type="text" size="8" name="speed" value="<%=speed%>" />
- <%=intl._("Capacity")%>:
+ <%=intl._t("Capacity")%>:
  <input type="text" size="8" name="capacity" value="<%=capacity%>" />
- <input type="submit" name="action" class="add" value="<%=intl._("Adjust peer bonuses")%>" /></p></div>
+ <input type="submit" name="action" class="add" value="<%=intl._t("Adjust peer bonuses")%>" /></p></div>
  </form>
- <a name="banlist"> </a><h2><%=intl._("Banned Peers")%></h2>
+ <a name="banlist"> </a><h2><%=intl._t("Banned Peers")%></h2>
  <jsp:useBean class="net.i2p.router.web.ProfilesHelper" id="profilesHelper" scope="request" />
  <jsp:setProperty name="profilesHelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
  <% profilesHelper.storeWriter(out); %>
  <jsp:getProperty name="profilesHelper" property="banlistSummary" />
- <div class="wideload"><h2><%=intl._("Banned IPs")%></h2>
+ <div class="wideload"><h2><%=intl._t("Banned IPs")%></h2>
  <jsp:getProperty name="peerhelper" property="blocklistSummary" />
 
 </div><hr></div></div></body></html>
diff --git a/apps/routerconsole/jsp/configreseed.jsp b/apps/routerconsole/jsp/configreseed.jsp
index de2351e9e9..ebc94b9c9f 100644
--- a/apps/routerconsole/jsp/configreseed.jsp
+++ b/apps/routerconsole/jsp/configreseed.jsp
@@ -13,107 +13,107 @@
 
 <jsp:useBean class="net.i2p.router.web.ConfigReseedHelper" id="reseedHelper" scope="request" />
 <jsp:setProperty name="reseedHelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
-<h1><%=intl._("I2P Reseeding Configuration")%></h1>
+<h1><%=intl._t("I2P Reseeding Configuration")%></h1>
 <div class="main" id="main">
 <%@include file="confignav.jsi" %>
 
 <jsp:useBean class="net.i2p.router.web.ConfigReseedHandler" id="formhandler" scope="request" />
 <%@include file="formhandler.jsi" %>
 
-<p><%=intl._("Reseeding is the bootstrapping process used to find other routers when you first install I2P, or when your router has too few router references remaining.")%>
-<%=intl._("If reseeding has failed, you should first check your network connection.")%>
-<%=intl._("See {0} for instructions on reseeding manually.", "<a href=\"https://geti2p.net/faq#manual_reseed\">" + intl._("the FAQ") + "</a>")%>
+<p><%=intl._t("Reseeding is the bootstrapping process used to find other routers when you first install I2P, or when your router has too few router references remaining.")%>
+<%=intl._t("If reseeding has failed, you should first check your network connection.")%>
+<%=intl._t("See {0} for instructions on reseeding manually.", "<a href=\"https://geti2p.net/faq#manual_reseed\">" + intl._t("the FAQ") + "</a>")%>
 </p>
 
 <div class="configure"><form action="" method="POST">
 <input type="hidden" name="nonce" value="<%=pageNonce%>" >
-<h3><%=intl._("Manual Reseed from URL")%></h3>
-<p><%=intl._("Enter zip or su3 URL")%> :
+<h3><%=intl._t("Manual Reseed from URL")%></h3>
+<p><%=intl._t("Enter zip or su3 URL")%> :
 <input name="url" type="text" size="60" value="" />
-<br><%=intl._("The su3 format is preferred, as it will be verified as signed by a trusted source.")%>
-<%=intl._("The zip format is unsigned; use a zip file only from a source that you trust.")%>
+<br><%=intl._t("The su3 format is preferred, as it will be verified as signed by a trusted source.")%>
+<%=intl._t("The zip format is unsigned; use a zip file only from a source that you trust.")%>
 </p>
 <div class="formaction">
-<input type="submit" name="action" class="download" value="<%=intl._("Reseed from URL")%>" />
+<input type="submit" name="action" class="download" value="<%=intl._t("Reseed from URL")%>" />
 </div></form></div>
 
 <div class="configure">
 <form action="" method="POST" enctype="multipart/form-data" accept-charset="UTF-8">
 <input type="hidden" name="nonce" value="<%=pageNonce%>" >
-<h3><%=intl._("Manual Reseed from File")%></h3>
-<p><%=intl._("Select zip or su3 file")%> :
+<h3><%=intl._t("Manual Reseed from File")%></h3>
+<p><%=intl._t("Select zip or su3 file")%> :
 <input name="file" type="file" value="" />
-<br><%=intl._("The su3 format is preferred, as it will be verified as signed by a trusted source.")%>
-<%=intl._("The zip format is unsigned; use a zip file only from a source that you trust.")%>
+<br><%=intl._t("The su3 format is preferred, as it will be verified as signed by a trusted source.")%>
+<%=intl._t("The zip format is unsigned; use a zip file only from a source that you trust.")%>
 </p>
 <div class="formaction">
-<input type="submit" name="action" class="download" value="<%=intl._("Reseed from file")%>" />
+<input type="submit" name="action" class="download" value="<%=intl._t("Reseed from file")%>" />
 </div></form></div>
 
 <div class="configure">
 <form action="/createreseed" method="GET">
-<h3><%=intl._("Create Reseed File")%></h3>
-<p><%=intl._("Create a new reseed zip file you may share for others to reseed manually.")%>
-<%=intl._("This file will never contain your own router's identity or IP.")%>
+<h3><%=intl._t("Create Reseed File")%></h3>
+<p><%=intl._t("Create a new reseed zip file you may share for others to reseed manually.")%>
+<%=intl._t("This file will never contain your own router's identity or IP.")%>
 </p>
 <div class="formaction">
-<input type="submit" name="action" class="go" value="<%=intl._("Create reseed file")%>" />
+<input type="submit" name="action" class="go" value="<%=intl._t("Create reseed file")%>" />
 </div></form></div>
 
 <div class="configure">
 <form action="" method="POST">
 <input type="hidden" name="nonce" value="<%=pageNonce%>" >
-<h3><%=intl._("Reseeding Configuration")%></h3>
-<p><b><%=intl._("The default settings will work for most people.")%></b>
-<%=intl._("Change these only if HTTPS is blocked by a restrictive firewall and reseed has failed.")%>
+<h3><%=intl._t("Reseeding Configuration")%></h3>
+<p><b><%=intl._t("The default settings will work for most people.")%></b>
+<%=intl._t("Change these only if HTTPS is blocked by a restrictive firewall and reseed has failed.")%>
 </p>
 <div class="wideload">
 <table border="0" cellspacing="5">
-<tr><td class="mediumtags" align="right"><b><%=intl._("Reseed URL Selection")%>:</b></td>
+<tr><td class="mediumtags" align="right"><b><%=intl._t("Reseed URL Selection")%>:</b></td>
 <td><input type="radio" class="optbox" name="mode" value="0" <%=reseedHelper.modeChecked(0) %> >
-<b><%=intl._("Try SSL first then non-SSL")%></b><br>
+<b><%=intl._t("Try SSL first then non-SSL")%></b><br>
 <input type="radio" class="optbox" name="mode" value="1" <%=reseedHelper.modeChecked(1) %> >
-<b><%=intl._("Use SSL only")%></b><br>
+<b><%=intl._t("Use SSL only")%></b><br>
 <input type="radio" class="optbox" name="mode" value="2" <%=reseedHelper.modeChecked(2) %> >
-<b><%=intl._("Use non-SSL only")%></b></td></tr>
-<tr><td class="mediumtags" align="right"><b><%=intl._("Reseed URLs")%>:</b></td>
+<b><%=intl._t("Use non-SSL only")%></b></td></tr>
+<tr><td class="mediumtags" align="right"><b><%=intl._t("Reseed URLs")%>:</b></td>
 <td><textarea wrap="off" name="reseedURL" cols="60" rows="7" spellcheck="false"><jsp:getProperty name="reseedHelper" property="reseedURL" /></textarea>
-<div class="formaction"><input type="submit" name="action" value="<%=intl._("Reset URL list")%>" /></div>
+<div class="formaction"><input type="submit" name="action" value="<%=intl._t("Reset URL list")%>" /></div>
 </td></tr>
 
-<tr><td class="mediumtags" align="right"><b><%=intl._("Enable HTTP Proxy?")%></b></td>
+<tr><td class="mediumtags" align="right"><b><%=intl._t("Enable HTTP Proxy?")%></b></td>
 <td><input type="checkbox" class="optbox" name="enable" value="true" <jsp:getProperty name="reseedHelper" property="enable" /> ></td></tr>
-<tr><td class="mediumtags" align="right"><b><%=intl._("HTTP Proxy Host")%>:</b></td>
+<tr><td class="mediumtags" align="right"><b><%=intl._t("HTTP Proxy Host")%>:</b></td>
 <td><input name="host" type="text" value="<jsp:getProperty name="reseedHelper" property="host" />" ></td></tr>
-<tr><td class="mediumtags" align="right"><b><%=intl._("HTTP Proxy Port")%>:</b></td>
+<tr><td class="mediumtags" align="right"><b><%=intl._t("HTTP Proxy Port")%>:</b></td>
 <td><input name="port" type="text" size="5" maxlength="5" value="<jsp:getProperty name="reseedHelper" property="port" />" ></td></tr>
 
-<tr><td class="mediumtags" align="right"><b><%=intl._("Use HTTP Proxy Authorization?")%></b></td>
+<tr><td class="mediumtags" align="right"><b><%=intl._t("Use HTTP Proxy Authorization?")%></b></td>
 <td><input type="checkbox" class="optbox" name="auth" value="true" <jsp:getProperty name="reseedHelper" property="auth" /> ></td></tr>
-<tr><td class="mediumtags" align="right"><b><%=intl._("HTTP Proxy Username")%>:</b></td>
+<tr><td class="mediumtags" align="right"><b><%=intl._t("HTTP Proxy Username")%>:</b></td>
 <td><input name="username" type="text" value="<jsp:getProperty name="reseedHelper" property="username" />" ></td></tr>
-<tr><td class="mediumtags" align="right"><b><%=intl._("HTTP Proxy Password")%>:</b></td>
+<tr><td class="mediumtags" align="right"><b><%=intl._t("HTTP Proxy Password")%>:</b></td>
 <td><input name="nofilter_password" type="password" value="<jsp:getProperty name="reseedHelper" property="nofilter_password" />" ></td></tr>
 
 <!-- TODO Need SSLEepGet support
-<tr><td class="mediumtags" align="right"><b><%=intl._("Enable HTTPS Proxy?")%></b></td>
+<tr><td class="mediumtags" align="right"><b><%=intl._t("Enable HTTPS Proxy?")%></b></td>
 <td><input type="checkbox" class="optbox" name="senable" value="true" <jsp:getProperty name="reseedHelper" property="senable" /> ></td></tr>
-<tr><td class="mediumtags" align="right"><b><%=intl._("HTTPS Proxy Host")%>:</b></td>
+<tr><td class="mediumtags" align="right"><b><%=intl._t("HTTPS Proxy Host")%>:</b></td>
 <td><input name="shost" type="text" value="<jsp:getProperty name="reseedHelper" property="shost" />" ></td></tr>
-<tr><td class="mediumtags" align="right"><b><%=intl._("HTTPS Proxy Port")%>:</b></td>
+<tr><td class="mediumtags" align="right"><b><%=intl._t("HTTPS Proxy Port")%>:</b></td>
 <td><input name="sport" type="text" size="5" maxlength="5" value="<jsp:getProperty name="reseedHelper" property="sport" />" ></td></tr>
 
-<tr><td class="mediumtags" align="right"><b><%=intl._("Use HTTPS Proxy Authorization?")%></b></td>
+<tr><td class="mediumtags" align="right"><b><%=intl._t("Use HTTPS Proxy Authorization?")%></b></td>
 <td><input type="checkbox" class="optbox" name="sauth" value="true" <jsp:getProperty name="reseedHelper" property="sauth" /> ></td></tr>
-<tr><td class="mediumtags" align="right"><b><%=intl._("HTTPS Proxy Username")%>:</b></td>
+<tr><td class="mediumtags" align="right"><b><%=intl._t("HTTPS Proxy Username")%>:</b></td>
 <td><input name="susername" type="text" value="<jsp:getProperty name="reseedHelper" property="susername" />" ></td></tr>
-<tr><td class="mediumtags" align="right"><b><%=intl._("HTTPS Proxy Password")%>:</b></td>
+<tr><td class="mediumtags" align="right"><b><%=intl._t("HTTPS Proxy Password")%>:</b></td>
 <td><input name="nofilter_spassword" type="password" value="<jsp:getProperty name="reseedHelper" property="nofilter_spassword" />" ></td></tr>
 -->
 
 </table></div>
 <div class="formaction">
-<input type="submit" class="cancel" name="foo" value="<%=intl._("Cancel")%>" />
-<input type="submit" name="action" class="download" value="<%=intl._("Save changes and reseed now")%>" />
-<input type="submit" name="action" class="accept" value="<%=intl._("Save changes")%>" />
+<input type="submit" class="cancel" name="foo" value="<%=intl._t("Cancel")%>" />
+<input type="submit" name="action" class="download" value="<%=intl._t("Save changes and reseed now")%>" />
+<input type="submit" name="action" class="accept" value="<%=intl._t("Save changes")%>" />
 </div></form></div></div></body></html>
diff --git a/apps/routerconsole/jsp/configservice.jsp b/apps/routerconsole/jsp/configservice.jsp
index f12c9b95cb..987aefdeba 100644
--- a/apps/routerconsole/jsp/configservice.jsp
+++ b/apps/routerconsole/jsp/configservice.jsp
@@ -10,7 +10,7 @@
 </head><body onload="initAjax()">
 
 <%@include file="summary.jsi" %>
-<h1><%=intl._("I2P Service Configuration")%></h1>
+<h1><%=intl._t("I2P Service Configuration")%></h1>
 <div class="main" id="main">
  <%@include file="confignav.jsi" %>
 
@@ -19,63 +19,63 @@
  <div class="configure">
  <form action="" method="POST">
  <input type="hidden" name="nonce" value="<%=pageNonce%>" >
- <h3><%=intl._("Shutdown the router")%></h3>
- <p><%=intl._("Graceful shutdown lets the router satisfy the agreements it has already made before shutting down, but may take a few minutes.")%> 
-    <%=intl._("If you need to kill the router immediately, that option is available as well.")%></p>
+ <h3><%=intl._t("Shutdown the router")%></h3>
+ <p><%=intl._t("Graceful shutdown lets the router satisfy the agreements it has already made before shutting down, but may take a few minutes.")%> 
+    <%=intl._t("If you need to kill the router immediately, that option is available as well.")%></p>
   <hr><div class="formaction">
- <input type="submit" class="stop" name="action" value="<%=intl._("Shutdown gracefully")%>" >
- <input type="submit" class="stop" name="action" value="<%=intl._("Shutdown immediately")%>" >
+ <input type="submit" class="stop" name="action" value="<%=intl._t("Shutdown gracefully")%>" >
+ <input type="submit" class="stop" name="action" value="<%=intl._t("Shutdown immediately")%>" >
  <% if (formhandler.shouldShowCancelGraceful()) { %>
-     <input type="submit" class="cancel" name="action" value="<%=intl._("Cancel graceful shutdown")%>" >
+     <input type="submit" class="cancel" name="action" value="<%=intl._t("Cancel graceful shutdown")%>" >
  <% } %>
  </div>
  <% if (System.getProperty("wrapper.version") != null) { %>
- <p><%=intl._("If you want the router to restart itself after shutting down, you can choose one of the following.")%> 
-    <%=intl._("This is useful in some situations - for example, if you changed some settings that client applications only read at startup, such as the routerconsole password or the interface it listens on.")%> 
-    <%=intl._("A graceful restart will take a few minutes (but your peers will appreciate your patience), while a hard restart does so immediately.")%> 
-    <%=intl._("After tearing down the router, it will wait 1 minute before starting back up again.")%></p>
+ <p><%=intl._t("If you want the router to restart itself after shutting down, you can choose one of the following.")%> 
+    <%=intl._t("This is useful in some situations - for example, if you changed some settings that client applications only read at startup, such as the routerconsole password or the interface it listens on.")%> 
+    <%=intl._t("A graceful restart will take a few minutes (but your peers will appreciate your patience), while a hard restart does so immediately.")%> 
+    <%=intl._t("After tearing down the router, it will wait 1 minute before starting back up again.")%></p>
  <hr><div class="formaction">
- <input type="submit" class="reload" name="action" value="<%=intl._("Graceful restart")%>" >
- <input type="submit" class="reload" name="action" value="<%=intl._("Hard restart")%>" >
+ <input type="submit" class="reload" name="action" value="<%=intl._t("Graceful restart")%>" >
+ <input type="submit" class="reload" name="action" value="<%=intl._t("Hard restart")%>" >
  <% } %></div>
 
  <% if ( (System.getProperty("os.name") != null) && (System.getProperty("os.name").startsWith("Win")) ) { %>
- <h3><%=intl._("Systray integration")%></h3>
- <p><%=intl._("On the windows platform, there is a small application to sit in the system tray, allowing you to view the router's status")%> 
-    <%=intl._("(later on, I2P client applications will be able to integrate their own functionality into the system tray as well).")%> 
-    <%=intl._("If you are on windows, you can either enable or disable that icon here.")%></p>
+ <h3><%=intl._t("Systray integration")%></h3>
+ <p><%=intl._t("On the windows platform, there is a small application to sit in the system tray, allowing you to view the router's status")%> 
+    <%=intl._t("(later on, I2P client applications will be able to integrate their own functionality into the system tray as well).")%> 
+    <%=intl._t("If you are on windows, you can either enable or disable that icon here.")%></p>
  <hr><div class="formaction">
- <input type="submit" name="action" value="<%=intl._("Show systray icon")%>" >
- <input type="submit" name="action" value="<%=intl._("Hide systray icon")%>" >
+ <input type="submit" name="action" value="<%=intl._t("Show systray icon")%>" >
+ <input type="submit" name="action" value="<%=intl._t("Hide systray icon")%>" >
  </div>
- <h3><%=intl._("Run on startup")%></h3>
- <p><%=intl._("You can control whether I2P is run on startup or not by selecting one of the following options - I2P will install (or remove) a service accordingly.")%> 
-    <%=intl._("If you prefer the command line, you can also run the ")%> <code>install_i2p_service_winnt.bat</code> (<%=intl._("or")%>
+ <h3><%=intl._t("Run on startup")%></h3>
+ <p><%=intl._t("You can control whether I2P is run on startup or not by selecting one of the following options - I2P will install (or remove) a service accordingly.")%> 
+    <%=intl._t("If you prefer the command line, you can also run the ")%> <code>install_i2p_service_winnt.bat</code> (<%=intl._t("or")%>
  <code>uninstall_i2p_service_winnt.bat</code>).</p>
  <hr><div class="formaction">
- <input type="submit" name="action" value="<%=intl._("Run I2P on startup")%>" >
-<input type="submit" name="action" value="<%=intl._("Don't run I2P on startup")%>" ></div>
- <p><b><%=intl._("Note")%>:</b> <%=intl._("If you are running I2P as service right now, removing it will shut down your router immediately.")%> 
-    <%=intl._("You may want to consider shutting down gracefully, as above, then running uninstall_i2p_service_winnt.bat.")%></p>
+ <input type="submit" name="action" value="<%=intl._t("Run I2P on startup")%>" >
+<input type="submit" name="action" value="<%=intl._t("Don't run I2P on startup")%>" ></div>
+ <p><b><%=intl._t("Note")%>:</b> <%=intl._t("If you are running I2P as service right now, removing it will shut down your router immediately.")%> 
+    <%=intl._t("You may want to consider shutting down gracefully, as above, then running uninstall_i2p_service_winnt.bat.")%></p>
  <% } %>
 
- <h3><%=intl._("Debugging")%></h3>
- <p><a href="/jobs"><%=intl._("View the job queue")%></a>
+ <h3><%=intl._t("Debugging")%></h3>
+ <p><a href="/jobs"><%=intl._t("View the job queue")%></a>
 <% if (System.getProperty("wrapper.version") != null) { %>
- <p><%=intl._("At times, it may be helpful to debug I2P by getting a thread dump. To do so, please select the following option and review the thread dumped to <a href=\"logs.jsp#servicelogs\">wrapper.log</a>.")%></p>
+ <p><%=intl._t("At times, it may be helpful to debug I2P by getting a thread dump. To do so, please select the following option and review the thread dumped to <a href=\"logs.jsp#servicelogs\">wrapper.log</a>.")%></p>
   <hr>
 <% } %>
  <div class="formaction">
- <input type="submit" class="reload" name="action" value="<%=intl._("Force GC")%>" >
+ <input type="submit" class="reload" name="action" value="<%=intl._t("Force GC")%>" >
 <% if (System.getProperty("wrapper.version") != null) { %>
- <input type="submit" class="download" name="action" value="<%=intl._("Dump threads")%>" >
+ <input type="submit" class="download" name="action" value="<%=intl._t("Dump threads")%>" >
 <% } %>
  </div>
 
- <h3><%=intl._("Launch browser on router startup?")%></h3>
- <p><%=intl._("I2P's main configuration interface is this web console, so for your convenience I2P can launch a web browser on startup pointing at")%>
+ <h3><%=intl._t("Launch browser on router startup?")%></h3>
+ <p><%=intl._t("I2P's main configuration interface is this web console, so for your convenience I2P can launch a web browser on startup pointing at")%>
  <a href="http://127.0.0.1:7657/">http://127.0.0.1:7657/</a> .</p>
  <hr><div class="formaction">
- <input type="submit" class="check" name="action" value="<%=intl._("View console on startup")%>" >
- <input type="submit" class="delete" name="action" value="<%=intl._("Do not view console on startup")%>" >
+ <input type="submit" class="check" name="action" value="<%=intl._t("View console on startup")%>" >
+ <input type="submit" class="delete" name="action" value="<%=intl._t("Do not view console on startup")%>" >
 </div></form></div></div></body></html>
diff --git a/apps/routerconsole/jsp/configsidebar.jsp b/apps/routerconsole/jsp/configsidebar.jsp
index 129feaa107..63c3ed18ce 100644
--- a/apps/routerconsole/jsp/configsidebar.jsp
+++ b/apps/routerconsole/jsp/configsidebar.jsp
@@ -17,7 +17,7 @@ input.default {
 </head><body onload="initAjax()">
 
 <%@include file="summary.jsi" %>
-<h1><%=intl._("I2P Summary Bar Configuration")%></h1>
+<h1><%=intl._t("I2P Summary Bar Configuration")%></h1>
 <div class="main" id="main">
 <%@include file="confignav.jsi" %>
 
@@ -29,23 +29,23 @@ input.default {
 <jsp:useBean class="net.i2p.router.web.SummaryHelper" id="summaryhelper" scope="request" />
 <jsp:setProperty name="summaryhelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
 
-<h3><%=intl._("Refresh Interval")%></h3>
+<h3><%=intl._t("Refresh Interval")%></h3>
 <form action="" method="POST">
  <input type="hidden" name="nonce" value="<%=pageNonce%>" >
  <input type="hidden" name="group" value="0">
  <input type="text" name="refreshInterval" value="<jsp:getProperty name="intl" property="refresh" />" >
- <%=intl._("seconds")%>
- <input type="submit" name="action" class="accept" value="<%=intl._("Save")%>" >
+ <%=intl._t("seconds")%>
+ <input type="submit" name="action" class="accept" value="<%=intl._t("Save")%>" >
 </form>
 
-<h3><%=intl._("Customize Summary Bar")%></h3>
+<h3><%=intl._t("Customize Summary Bar")%></h3>
 <form action="" method="POST">
  <input type="hidden" name="nonce" value="<%=pageNonce%>" >
  <input type="hidden" name="group" value="2">
  <jsp:getProperty name="summaryhelper" property="configTable" />
  <div class="formaction">
-  <input type="submit" class="reload" name="action" value="<%=intl._("Restore full default")%>" >
-  <input type="submit" class="reload" name="action" value="<%=intl._("Restore minimal default")%>" >
+  <input type="submit" class="reload" name="action" value="<%=intl._t("Restore full default")%>" >
+  <input type="submit" class="reload" name="action" value="<%=intl._t("Restore minimal default")%>" >
  </div>
 </form>
 </div></body></html>
diff --git a/apps/routerconsole/jsp/configstats.jsp b/apps/routerconsole/jsp/configstats.jsp
index 4100a4b1e2..802d615e5c 100644
--- a/apps/routerconsole/jsp/configstats.jsp
+++ b/apps/routerconsole/jsp/configstats.jsp
@@ -61,7 +61,7 @@ function toggleAll(category)
 </script>
 </head><body onLoad="init();">
 <%@include file="summary.jsi" %>
-<h1><%=intl._("I2P Stats Configuration")%></h1>
+<h1><%=intl._t("I2P Stats Configuration")%></h1>
 <div class="main" id="main">
  <%@include file="confignav.jsi" %>
 
@@ -73,44 +73,44 @@ function toggleAll(category)
  <form id="statsForm" name="statsForm" action="" method="POST">
  <input type="hidden" name="action" value="foo" >
  <input type="hidden" name="nonce" value="<%=pageNonce%>" >
- <h3><%=intl._("Configure I2P Stat Collection")%></h3>
- <p><%=intl._("Enable full stats?")%>
+ <h3><%=intl._t("Configure I2P Stat Collection")%></h3>
+ <p><%=intl._t("Enable full stats?")%>
  <input type="checkbox" class="optbox" name="isFull" value="true" <%
  if (statshelper.getIsFull()) { %>checked="checked" <% } %> >
- (<%=intl._("change requires restart to take effect")%>)<br>
+ (<%=intl._t("change requires restart to take effect")%>)<br>
 <%
 
   // stats.log for devs only and grows without bounds, not recommended
   boolean shouldShowLog = statshelper.shouldShowLog();
   if (shouldShowLog) {
 
-%><%=intl._("Stat file")%>: <input type="text" name="filename" value="<%=statshelper.getFilename()%>" ><br>
+%><%=intl._t("Stat file")%>: <input type="text" name="filename" value="<%=statshelper.getFilename()%>" ><br>
 Warning - Log with care, stat file grows without limit.<br>
 <%
 
   }  // shouldShowLog
 
-%><%=intl._("Filter")%>: (<a href="javascript:void(null);" onclick="toggleAll('*')"><%=intl._("toggle all")%></a>)<br></p>
+%><%=intl._t("Filter")%>: (<a href="javascript:void(null);" onclick="toggleAll('*')"><%=intl._t("toggle all")%></a>)<br></p>
  <div class="wideload">
  <table>
  <% while (statshelper.hasMoreStats()) {
       while (statshelper.groupRequired()) { %>
  <tr class="tablefooter">
      <td align="left" colspan="3" id=<%=statshelper.getCurrentGroupName()%>>
-     <b><%=intl._(statshelper.getCurrentGroupName())%></b>
-     (<a href="javascript:void(null);" onclick="toggleAll('<%=statshelper.getCurrentGroupName()%>')"><%=intl._("toggle all")%></a>)
+     <b><%=intl._t(statshelper.getCurrentGroupName())%></b>
+     (<a href="javascript:void(null);" onclick="toggleAll('<%=statshelper.getCurrentGroupName()%>')"><%=intl._t("toggle all")%></a>)
      </td></tr>
  <tr class="tablefooter">
 <%
 
   if (shouldShowLog) {
 
-%>  <td align="center"><b><%=intl._("Log")%></b></td>
+%>  <td align="center"><b><%=intl._t("Log")%></b></td>
 <%
 
   }  // shouldShowLog
 
-%>    <td align="center"><b><%=intl._("Graph")%></b></td>
+%>    <td align="center"><b><%=intl._t("Graph")%></b></td>
     <td></td></tr>
         <%
      } // end iterating over required groups for the current stat %>
@@ -139,14 +139,14 @@ Warning - Log with care, stat file grows without limit.<br>
 
 %> <tr><td colspan="3"></td></tr>
  <tr><td align="center"><input type="checkbox" class="optbox" name="explicitFilter" ></td>
-     <td colspan="2"><%=intl._("Advanced filter")%>:
+     <td colspan="2"><%=intl._t("Advanced filter")%>:
      <input type="text" name="explicitFilterValue" value="<%=statshelper.getExplicitFilter()%>" size="40" ></td></tr>
 <%
 
   }  // shouldShowLog
 
 %>   <tr class="tablefooter"><td colspan="3" align="right">
-<input type="reset" class="cancel" value="<%=intl._("Cancel")%>" >
-<input type="submit" name="shouldsave" class="accept" value="<%=intl._("Save changes")%>" >
+<input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" >
+<input type="submit" name="shouldsave" class="accept" value="<%=intl._t("Save changes")%>" >
 </td></tr>
 </table></div></form></div></div></body></html>
diff --git a/apps/routerconsole/jsp/configtunnels.jsp b/apps/routerconsole/jsp/configtunnels.jsp
index de82f0027d..09a2ceee97 100644
--- a/apps/routerconsole/jsp/configtunnels.jsp
+++ b/apps/routerconsole/jsp/configtunnels.jsp
@@ -13,28 +13,28 @@
 
 <jsp:useBean class="net.i2p.router.web.ConfigTunnelsHelper" id="tunnelshelper" scope="request" />
 <jsp:setProperty name="tunnelshelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
-<h1><%=intl._("I2P Tunnel Configuration")%></h1>
+<h1><%=intl._t("I2P Tunnel Configuration")%></h1>
 <div class="main" id="main">
  <%@include file="confignav.jsi" %>
  <jsp:useBean class="net.i2p.router.web.ConfigTunnelsHandler" id="formhandler" scope="request" />
 <%@include file="formhandler.jsi" %>
  <div class="configure"><p>
- <%=intl._("NOTE")%>: 
- <%=intl._("The default settings work for most people.")%> 
- <%=intl._("There is a fundamental tradeoff between anonymity and performance.")%>
- <%=intl._("Tunnels longer than 3 hops (for example 2 hops + 0-2 hops, 3 hops + 0-1 hops, 3 hops + 0-2 hops), or a high quantity + backup quantity, may severely reduce performance or reliability.")%>
- <%=intl._("High CPU and/or high outbound bandwidth usage may result.")%>
- <%=intl._("Change these settings with care, and adjust them if you have problems.")%>
+ <%=intl._t("NOTE")%>: 
+ <%=intl._t("The default settings work for most people.")%> 
+ <%=intl._t("There is a fundamental tradeoff between anonymity and performance.")%>
+ <%=intl._t("Tunnels longer than 3 hops (for example 2 hops + 0-2 hops, 3 hops + 0-1 hops, 3 hops + 0-2 hops), or a high quantity + backup quantity, may severely reduce performance or reliability.")%>
+ <%=intl._t("High CPU and/or high outbound bandwidth usage may result.")%>
+ <%=intl._t("Change these settings with care, and adjust them if you have problems.")%>
 <div class="wideload">
 <form action="" method="POST">
  <input type="hidden" name="nonce" value="<%=pageNonce%>" >
  <input type="hidden" name="action" value="blah" >
  <jsp:getProperty name="tunnelshelper" property="form" />
- <%=intl._("Note")%>: <%=intl._("Exploratory tunnel setting changes are stored in the router.config file.")%>
- <%=intl._("Client tunnel changes are temporary and are not saved.")%>
-<%=intl._("To make permanent client tunnel changes see the")%> <a href="i2ptunnel/index.jsp"><%=intl._("i2ptunnel page")%></a>.
+ <%=intl._t("Note")%>: <%=intl._t("Exploratory tunnel setting changes are stored in the router.config file.")%>
+ <%=intl._t("Client tunnel changes are temporary and are not saved.")%>
+<%=intl._t("To make permanent client tunnel changes see the")%> <a href="i2ptunnel/index.jsp"><%=intl._t("i2ptunnel page")%></a>.
  <hr><div class="formaction">
-<input type="reset" class="cancel" value="<%=intl._("Cancel")%>" >
-<input type="submit" name="shouldsave" class="accept" value="<%=intl._("Save changes")%>" >
+<input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" >
+<input type="submit" name="shouldsave" class="accept" value="<%=intl._t("Save changes")%>" >
 </div>
  </form></div></div></div></body></html>
diff --git a/apps/routerconsole/jsp/configui.jsp b/apps/routerconsole/jsp/configui.jsp
index 7635ab1e3e..73d0ec565d 100644
--- a/apps/routerconsole/jsp/configui.jsp
+++ b/apps/routerconsole/jsp/configui.jsp
@@ -22,14 +22,14 @@ input.default {
 <jsp:useBean class="net.i2p.router.web.ConfigUIHelper" id="uihelper" scope="request" />
 <jsp:setProperty name="uihelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
 
-<h1><%=uihelper._("I2P UI Configuration")%></h1>
+<h1><%=uihelper._t("I2P UI Configuration")%></h1>
 <div class="main" id="main">
 
  <%@include file="confignav.jsi" %>
 
  <jsp:useBean class="net.i2p.router.web.ConfigUIHandler" id="formhandler" scope="request" />
 <%@include file="formhandler.jsi" %>
-<div class="configure"><div class="topshimten"><h3><%=uihelper._("Router Console Theme")%></h3></div>
+<div class="configure"><div class="topshimten"><h3><%=uihelper._t("Router Console Theme")%></h3></div>
  <form action="" method="POST">
  <input type="hidden" name="consoleNonce" value="<%=intl.getNonce()%>" >
  <input type="hidden" name="nonce" value="<%=pageNonce%>" >
@@ -40,28 +40,28 @@ input.default {
 %>
  <jsp:getProperty name="uihelper" property="settings" />
 <% } else { %>
-<%=uihelper._("Theme selection disabled for Internet Explorer, sorry.")%>
+<%=uihelper._t("Theme selection disabled for Internet Explorer, sorry.")%>
 <hr>
-<%=uihelper._("If you're not using IE, it's likely that your browser is pretending to be IE; please configure your browser (or proxy) to use a different User Agent string if you'd like to access the console themes.")%>
+<%=uihelper._t("If you're not using IE, it's likely that your browser is pretending to be IE; please configure your browser (or proxy) to use a different User Agent string if you'd like to access the console themes.")%>
 <% } %>
  <jsp:getProperty name="uihelper" property="forceMobileConsole" />
-<h3><%=uihelper._("Router Console Language")%></h3>
+<h3><%=uihelper._t("Router Console Language")%></h3>
 <jsp:getProperty name="uihelper" property="langSettings" />
-<p><%=uihelper._("Please contribute to the router console translation project! Contact the developers in #i2p-dev on IRC to help.")%>
+<p><%=uihelper._t("Please contribute to the router console translation project! Contact the developers in #i2p-dev on IRC to help.")%>
 </p><hr><div class="formaction">
-<input type="reset" class="cancel" value="<%=intl._("Cancel")%>" >
-<input type="submit" name="shouldsave" class="accept" value="<%=intl._("Apply")%>" >
+<input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" >
+<input type="submit" name="shouldsave" class="accept" value="<%=intl._t("Apply")%>" >
 </div></form>
 
-<h3><%=uihelper._("Router Console Password")%></h3>
+<h3><%=uihelper._t("Router Console Password")%></h3>
 <form action="" method="POST">
  <input type="hidden" name="nonce" value="<%=pageNonce%>" >
  <jsp:getProperty name="uihelper" property="passwordForm" />
  <div class="formaction">
-  <input type="submit" name="action" class="default" value="<%=intl._("Add user")%>" >
-  <input type="submit" name="action" class="delete" value="<%=intl._("Delete selected")%>" >
-  <input type="reset" class="cancel" value="<%=intl._("Cancel")%>" >
-  <input type="submit" name="action" class="add" value="<%=intl._("Add user")%>" >
+  <input type="submit" name="action" class="default" value="<%=intl._t("Add user")%>" >
+  <input type="submit" name="action" class="delete" value="<%=intl._t("Delete selected")%>" >
+  <input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" >
+  <input type="submit" name="action" class="add" value="<%=intl._t("Add user")%>" >
  </div>
 </form></div>
 </div></body></html>
diff --git a/apps/routerconsole/jsp/configupdate.jsp b/apps/routerconsole/jsp/configupdate.jsp
index 1171fbcab3..e1e0734043 100644
--- a/apps/routerconsole/jsp/configupdate.jsp
+++ b/apps/routerconsole/jsp/configupdate.jsp
@@ -11,7 +11,7 @@
 </head><body onload="initAjax()">
 
 <%@include file="summary.jsi" %>
-<h1><%=intl._("I2P Update Configuration")%></h1>
+<h1><%=intl._t("I2P Update Configuration")%></h1>
 <div class="main" id="main">
  <%@include file="confignav.jsi" %>
 
@@ -27,57 +27,57 @@
  <% /* set hidden default */ %>
  <input type="submit" name="action" value="" style="display:none" >
     <% if (updatehelper.canInstall()) { %>
-      <h3><%=intl._("Check for I2P and news updates")%></h3>
+      <h3><%=intl._t("Check for I2P and news updates")%></h3>
       <div class="wideload"><table border="0" cellspacing="5">
         <tr><td colspan="2"></tr>
-        <tr><td class="mediumtags" align="right"><b><%=intl._("News &amp; I2P Updates")%>:</b></td>
+        <tr><td class="mediumtags" align="right"><b><%=intl._t("News &amp; I2P Updates")%>:</b></td>
      <% } else { %>
-      <h3><%=intl._("Check for news updates")%></h3>
+      <h3><%=intl._t("Check for news updates")%></h3>
       <div class="wideload"><table border="0" cellspacing="5">
         <tr><td colspan="2"></tr>
-        <tr><td class="mediumtags" align="right"><b><%=intl._("News Updates")%>:</b></td>
+        <tr><td class="mediumtags" align="right"><b><%=intl._t("News Updates")%>:</b></td>
      <% }   // if canInstall %>
-          <td> <% if ("true".equals(System.getProperty("net.i2p.router.web.UpdateHandler.updateInProgress", "false"))) { %> <i><%=intl._("Update In Progress")%></i><br> <% } else { %> <input type="submit" name="action" class="check" value="<%=intl._("Check for updates")%>" />
+          <td> <% if ("true".equals(System.getProperty("net.i2p.router.web.UpdateHandler.updateInProgress", "false"))) { %> <i><%=intl._t("Update In Progress")%></i><br> <% } else { %> <input type="submit" name="action" class="check" value="<%=intl._t("Check for updates")%>" />
             <% } %></td></tr>
         <tr><td colspan="2"><br></td></tr>
-        <tr><td class="mediumtags" align="right"><b><%=intl._("News URL")%>:</b></td>
+        <tr><td class="mediumtags" align="right"><b><%=intl._t("News URL")%>:</b></td>
           <td><input type="text" size="60" name="newsURL" <% if (!updatehelper.isAdvanced()) { %>readonly="readonly"<% } %> value="<jsp:getProperty name="updatehelper" property="newsURL" />"></td>
-        </tr><tr><td class="mediumtags" align="right"><b><%=intl._("Refresh frequency")%>:</b>
+        </tr><tr><td class="mediumtags" align="right"><b><%=intl._t("Refresh frequency")%>:</b>
           <td><jsp:getProperty name="updatehelper" property="refreshFrequencySelectBox" /></td></tr>
     <% if (updatehelper.canInstall()) { %>
-        <tr><td class="mediumtags" align="right"><b><%=formhandler._("Update policy")%>:</b></td>
+        <tr><td class="mediumtags" align="right"><b><%=formhandler._t("Update policy")%>:</b></td>
           <td><jsp:getProperty name="updatehelper" property="updatePolicySelectBox" /></td></tr>
     <% }   // if canInstall %>
-        <tr><td class="mediumtags" align="right"><b><%=intl._("Fetch news through the eepProxy?")%></b></td>
+        <tr><td class="mediumtags" align="right"><b><%=intl._t("Fetch news through the eepProxy?")%></b></td>
           <td><jsp:getProperty name="updatehelper" property="newsThroughProxy" /></td></tr>
-        <tr><td class="mediumtags" align="right"><b><%=intl._("Update through the eepProxy?")%></b></td>
+        <tr><td class="mediumtags" align="right"><b><%=intl._t("Update through the eepProxy?")%></b></td>
           <td><jsp:getProperty name="updatehelper" property="updateThroughProxy" /></td></tr>
       <% if (updatehelper.isAdvanced()) { %>
-        <tr><td class="mediumtags" align="right"><b><%=intl._("eepProxy host")%>:</b></td>
+        <tr><td class="mediumtags" align="right"><b><%=intl._t("eepProxy host")%>:</b></td>
           <td><input type="text" size="10" name="proxyHost" value="<jsp:getProperty name="updatehelper" property="proxyHost" />" /></td>
-        </tr><tr><td class="mediumtags" align="right"><b><%=intl._("eepProxy port")%>:</b></td>
+        </tr><tr><td class="mediumtags" align="right"><b><%=intl._t("eepProxy port")%>:</b></td>
           <td><input type="text" size="10" name="proxyPort" value="<jsp:getProperty name="updatehelper" property="proxyPort" />" /></td></tr>
       <% }   // if isAdvanced %>
     <% if (updatehelper.canInstall()) { %>
       <% if (updatehelper.isAdvanced()) { %>
-        <tr><td class="mediumtags" align="right"><b><%=intl._("Update URLs")%>:</b></td>
+        <tr><td class="mediumtags" align="right"><b><%=intl._t("Update URLs")%>:</b></td>
           <td><textarea cols="60" rows="6" name="updateURL" wrap="off" spellcheck="false"><jsp:getProperty name="updatehelper" property="updateURL" /></textarea></td>
-        </tr><tr><td class="mediumtags" align="right"><b><%=intl._("Trusted keys")%>:</b></td>
+        </tr><tr><td class="mediumtags" align="right"><b><%=intl._t("Trusted keys")%>:</b></td>
           <td><textarea cols="60" rows="6" name="trustedKeys" wrap="off" spellcheck="false"><jsp:getProperty name="updatehelper" property="trustedKeys" /></textarea></td></tr>
-        <tr><td id="devSU3build" class="mediumtags" align="right"><b><%=intl._("Update with signed development builds?")%></b></td>
+        <tr><td id="devSU3build" class="mediumtags" align="right"><b><%=intl._t("Update with signed development builds?")%></b></td>
           <td><jsp:getProperty name="updatehelper" property="updateDevSU3" /></td>
-        </tr><tr><td class="mediumtags" align="right"><b><%=intl._("Signed Build URL")%>:</b></td>
+        </tr><tr><td class="mediumtags" align="right"><b><%=intl._t("Signed Build URL")%>:</b></td>
           <td><input type="text" size="60" name="devSU3URL" value="<jsp:getProperty name="updatehelper" property="devSU3URL" />"></td></tr>
-        <tr><td id="unsignedbuild" class="mediumtags" align="right"><b><%=intl._("Update with unsigned development builds?")%></b></td>
+        <tr><td id="unsignedbuild" class="mediumtags" align="right"><b><%=intl._t("Update with unsigned development builds?")%></b></td>
           <td><jsp:getProperty name="updatehelper" property="updateUnsigned" /></td>
-        </tr><tr><td class="mediumtags" align="right"><b><%=intl._("Unsigned Build URL")%>:</b></td>
+        </tr><tr><td class="mediumtags" align="right"><b><%=intl._t("Unsigned Build URL")%>:</b></td>
           <td><input type="text" size="60" name="zipURL" value="<jsp:getProperty name="updatehelper" property="zipURL" />"></td></tr>
       <% }   // if isAdvanced %>
     <% } else { %>
-        <tr><td class="mediumtags" align="center" colspan="2"><b><%=intl._("Updates will be dispatched via your package manager.")%></b></td></tr>
+        <tr><td class="mediumtags" align="center" colspan="2"><b><%=intl._t("Updates will be dispatched via your package manager.")%></b></td></tr>
     <% }   // if canInstall %>
         <tr class="tablefooter"><td colspan="2">
         <div class="formaction">
-            <input type="reset" class="cancel" value="<%=intl._("Cancel")%>" >
-            <input type="submit" name="action" class="accept" value="<%=intl._("Save")%>" >
+            <input type="reset" class="cancel" value="<%=intl._t("Cancel")%>" >
+            <input type="submit" name="action" class="accept" value="<%=intl._t("Save")%>" >
         </div></td></tr></table></div></form></div></div></body></html>
diff --git a/apps/routerconsole/jsp/console.jsp b/apps/routerconsole/jsp/console.jsp
index ffed509dd5..1cff1e369e 100644
--- a/apps/routerconsole/jsp/console.jsp
+++ b/apps/routerconsole/jsp/console.jsp
@@ -15,7 +15,7 @@
 
 <%@include file="summary.jsi" %>
 
-<h1><%=intl._("I2P Router Console")%></h1>
+<h1><%=intl._t("I2P Router Console")%></h1>
 <div class="news" id="news">
 <%
    if (newshelper.shouldShowNews()) {
@@ -61,7 +61,7 @@
     <a href="/console?lang=vi&amp;consoleNonce=<%=consoleNonce%>"><img height="11" width="16" style="padding: 0 2px;" src="/flags.jsp?c=vn" title="Tiếng Việt" alt="Tiếng Việt"></a>
   </div>
   <a name="top"></a>
-  <h2><%=intl._("Welcome to I2P")%></h2>
+  <h2><%=intl._t("Welcome to I2P")%></h2>
  </div>
  <% java.io.File fpath = new java.io.File(net.i2p.I2PAppContext.getGlobalContext().getBaseDir(), "docs/readme.html"); %>
  <jsp:setProperty name="contenthelper" property="page" value="<%=fpath.getAbsolutePath()%>" />
diff --git a/apps/routerconsole/jsp/dns.jsp b/apps/routerconsole/jsp/dns.jsp
index 8080c115b1..23a353416e 100644
--- a/apps/routerconsole/jsp/dns.jsp
+++ b/apps/routerconsole/jsp/dns.jsp
@@ -30,11 +30,11 @@
 
 <%@include file="summary.jsi" %>
 
-<h1><%=intl._("I2P Addressbook")%> <span class="newtab"><a href="/susidns/index" target="_blank" title="<%=intl._("Open in new tab")%>"><img src="<%=intl.getTheme(request.getHeader("User-Agent"))%>images/newtab.png" /></a></span></h1>
+<h1><%=intl._t("I2P Addressbook")%> <span class="newtab"><a href="/susidns/index" target="_blank" title="<%=intl._t("Open in new tab")%>"><img src="<%=intl.getTheme(request.getHeader("User-Agent"))%>images/newtab.png" /></a></span></h1>
 <div class="main" id="main">
 <iframe src="/susidns/index" width="100%" height="100%" frameborder="0" border="0" name="susidnsframe" id="susidnsframe" onload="setupFrame()" allowtransparency="true">
-<%=intl._("Your browser does not support iFrames.")%>
-&nbsp;<a href="/susidns/index"><%=intl._("Click here to continue.")%></a>
+<%=intl._t("Your browser does not support iFrames.")%>
+&nbsp;<a href="/susidns/index"><%=intl._t("Click here to continue.")%></a>
 </iframe>
 </div></body></html>
 <%
diff --git a/apps/routerconsole/jsp/error.jsp b/apps/routerconsole/jsp/error.jsp
index 5dfba993eb..663b614316 100644
--- a/apps/routerconsole/jsp/error.jsp
+++ b/apps/routerconsole/jsp/error.jsp
@@ -25,6 +25,6 @@
 <%@include file="summary.jsi" %>
 <h1><%=ERROR_CODE%>&nbsp;<%=ERROR_MESSAGE%></h1>
 <div class="sorry" id="warning">
-<%=intl._("Sorry! You appear to be requesting a non-existent Router Console page or resource.")%><hr>
-<%=intl._("Error 404")%>: <%=ERROR_URI%>&nbsp;<%=intl._("not found")%>.
+<%=intl._t("Sorry! You appear to be requesting a non-existent Router Console page or resource.")%><hr>
+<%=intl._t("Error 404")%>: <%=ERROR_URI%>&nbsp;<%=intl._t("not found")%>.
 </div></body></html>
diff --git a/apps/routerconsole/jsp/error500.jsp b/apps/routerconsole/jsp/error500.jsp
index 223b4d5de3..c56b1f7ea0 100644
--- a/apps/routerconsole/jsp/error500.jsp
+++ b/apps/routerconsole/jsp/error500.jsp
@@ -22,26 +22,26 @@
 </head><body>
 <div class="routersummaryouter">
 <div class="routersummary">
-<a href="/" title="<%=intl._("Router Console")%>"><img src="/themes/console/images/i2plogo.png" alt="<%=intl._("I2P Router Console")%>" border="0"></a><hr>
-<a href="/config"><%=intl._("Configuration")%></a> <a href="/help"><%=intl._("Help")%></a>
+<a href="/" title="<%=intl._t("Router Console")%>"><img src="/themes/console/images/i2plogo.png" alt="<%=intl._t("I2P Router Console")%>" border="0"></a><hr>
+<a href="/config"><%=intl._t("Configuration")%></a> <a href="/help"><%=intl._t("Help")%></a>
 </div></div>
 <h1><%=ERROR_CODE%> <%=ERROR_MESSAGE%></h1>
 <div class="sorry" id="warning">
-<%=intl._("Sorry! There has been an internal error.")%>
+<%=intl._t("Sorry! There has been an internal error.")%>
 <hr>
 <p>
 <% /* note to translators - both parameters are URLs */
-%><%=intl._("Please report bugs on {0} or {1}.",
+%><%=intl._t("Please report bugs on {0} or {1}.",
           "<a href=\"http://trac.i2p2.i2p/newticket\">trac.i2p2.i2p</a>",
           "<a href=\"https://trac.i2p2.de/newticket\">trac.i2p2.de</a>")%>
 <!--
-<%=intl._("You may use the username \"guest\" and password \"guest\" if you do not wish to register.")%>
+<%=intl._t("You may use the username \"guest\" and password \"guest\" if you do not wish to register.")%>
 -->
-<p><%=intl._("Please include this information in bug reports")%>:
+<p><%=intl._t("Please include this information in bug reports")%>:
 </p></div><div class="sorry" id="warning2">
-<h3><%=intl._("Error Details")%></h3>
+<h3><%=intl._t("Error Details")%></h3>
 <p>
-<%=intl._("Error {0}", ERROR_CODE)%>: <%=ERROR_URI%> <%=ERROR_MESSAGE%>
+<%=intl._t("Error {0}", ERROR_CODE)%>: <%=ERROR_URI%> <%=ERROR_MESSAGE%>
 </p><p>
 <%
     if (ERROR_THROWABLE != null) {
@@ -56,7 +56,7 @@
     }
 %>
 </p>
-<h3><%=intl._("I2P Version and Running Environment")%></h3>
+<h3><%=intl._t("I2P Version and Running Environment")%></h3>
 <p>
 <b>I2P version:</b> <%=net.i2p.router.RouterVersion.FULL_VERSION%><br>
 <b>Java version:</b> <%=System.getProperty("java.vendor")%> <%=System.getProperty("java.version")%> (<%=System.getProperty("java.runtime.name")%> <%=System.getProperty("java.runtime.version")%>)<br>
@@ -71,5 +71,5 @@
 <b>Jbigi:</b> <%=net.i2p.util.NativeBigInteger.loadStatus()%><br>
 <b>Encoding:</b> <%=System.getProperty("file.encoding")%><br>
 <b>Charset:</b> <%=java.nio.charset.Charset.defaultCharset().name()%></p>
-<p><%=intl._("Note that system information, log timestamps, and log messages may provide clues to your location; please review everything you include in a bug report.")%></p>
+<p><%=intl._t("Note that system information, log timestamps, and log messages may provide clues to your location; please review everything you include in a bug report.")%></p>
 </div></body></html>
diff --git a/apps/routerconsole/jsp/events.jsp b/apps/routerconsole/jsp/events.jsp
index b67aa5dd50..29838e7a78 100644
--- a/apps/routerconsole/jsp/events.jsp
+++ b/apps/routerconsole/jsp/events.jsp
@@ -18,7 +18,7 @@
 <%@include file="summaryajax.jsi" %>
 </head><body onload="initAjax()">
 <%@include file="summary.jsi" %>
-<h1><%=intl._("I2P Event Log")%></h1>
+<h1><%=intl._t("I2P Event Log")%></h1>
 <div class="main" id="main">
  <div class="eventspanel">
  <div class="widepanel">
diff --git a/apps/routerconsole/jsp/graph.jsp b/apps/routerconsole/jsp/graph.jsp
index 92c6f508f8..1d5c5bf1f5 100644
--- a/apps/routerconsole/jsp/graph.jsp
+++ b/apps/routerconsole/jsp/graph.jsp
@@ -16,7 +16,7 @@
 <%@include file="summaryajax.jsi" %>
 </head><body onload="initAjax()">
 <%@include file="summary.jsi" %>
-<h1><%=intl._("I2P Performance Graphs")%></h1>
+<h1><%=intl._t("I2P Performance Graphs")%></h1>
 <div class="main" id="main">
  <div class="graphspanel">
  <div class="widepanel">
diff --git a/apps/routerconsole/jsp/graphs.jsp b/apps/routerconsole/jsp/graphs.jsp
index 8d4aff7526..6cde501311 100644
--- a/apps/routerconsole/jsp/graphs.jsp
+++ b/apps/routerconsole/jsp/graphs.jsp
@@ -23,7 +23,7 @@
 <%@include file="summaryajax.jsi" %>
 </head><body onload="initAjax()">
 <%@include file="summary.jsi" %>
-<h1><%=intl._("I2P Performance Graphs")%></h1>
+<h1><%=intl._t("I2P Performance Graphs")%></h1>
 <div class="main" id="main">
  <div class="graphspanel">
  <div class="widepanel">
diff --git a/apps/routerconsole/jsp/home.jsp b/apps/routerconsole/jsp/home.jsp
index 8553e56e6d..ec00c6b087 100644
--- a/apps/routerconsole/jsp/home.jsp
+++ b/apps/routerconsole/jsp/home.jsp
@@ -23,12 +23,12 @@
 <div class="routersummaryouter">
  <div class="routersummary">
   <div style="height: 36px;">
-   <a href="/console"><img src="<%=intl.getTheme(request.getHeader("User-Agent"))%>images/i2plogo.png" alt="<%=intl._("I2P Router Console")%>" title="<%=intl._("I2P Router Console")%>"></a>
+   <a href="/console"><img src="<%=intl.getTheme(request.getHeader("User-Agent"))%>images/i2plogo.png" alt="<%=intl._t("I2P Router Console")%>" title="<%=intl._t("I2P Router Console")%>"></a>
   </div>
 <%
     if (!intl.allowIFrame(request.getHeader("User-Agent"))) {
 %>
-  <a href="/summaryframe"><%=intl._("Summary Bar")%></a>
+  <a href="/summaryframe"><%=intl._t("Summary Bar")%></a>
 <%
     }
 %>
@@ -39,7 +39,7 @@
  </div>
 </div>
 
-<h1><%=intl._("I2P Router Console")%></h1>
+<h1><%=intl._t("I2P Router Console")%></h1>
 
 <%
    if (newshelper.shouldShowNews()) {
@@ -57,7 +57,7 @@
 <jsp:useBean class="net.i2p.router.web.HomeHelper" id="homehelper" scope="request" />
 <jsp:setProperty name="homehelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
 <% if (homehelper.shouldShowWelcome()) { %>
-<div class="welcome" title="<%=intl._("Click a flag to select a language. Click 'configure language' below to change it later.")%>">
+<div class="welcome" title="<%=intl._t("Click a flag to select a language. Click 'configure language' below to change it later.")%>">
   <div class="langbox" id="langbox">
     <a href="/home?lang=en&amp;consoleNonce=<%=consoleNonce%>"><img height="11" width="16" style="padding: 0 2px;" src="/flags.jsp?c=us" title="English" alt="English"></a>
     <a href="/home?lang=ar&amp;consoleNonce=<%=consoleNonce%>"><img height="11" width="16" style="padding: 0 2px;" src="/flags.jsp?c=lang_ar" title="عربية" alt="عربية"></a>
@@ -87,7 +87,7 @@
     <a href="/home?lang=uk&amp;consoleNonce=<%=consoleNonce%>"><img height="11" width="16" style="padding: 0 2px;" src="/flags.jsp?c=ua" title="Українська" alt="Українська"></a>
     <a href="/home?lang=vi&amp;consoleNonce=<%=consoleNonce%>"><img height="11" width="16" style="padding: 0 2px;" src="/flags.jsp?c=vn" title="Tiếng Việt" alt="Tiếng Việt"></a>
   </div>
-  <h2><%=intl._("Welcome to I2P")%></h2>
+  <h2><%=intl._t("Welcome to I2P")%></h2>
 </div>
 <% }  // shouldShowWelcome %>
 
@@ -100,7 +100,7 @@
       <table class="search"><tr><td align="right">
         <input size="40" type="text" class="search" name="query" />
       </td><td align="left">
-        <button type="submit" value="search" class="search"><%=intl._("Search I2P")%></button>
+        <button type="submit" value="search" class="search"><%=intl._t("Search I2P")%></button>
       </td><td align="left">
         <jsp:useBean class="net.i2p.router.web.SearchHelper" id="searchhelper" scope="request" />
         <jsp:setProperty name="searchhelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
@@ -112,11 +112,11 @@
    }  // shouldShowSearch()
 %>
   <div class="ag2">
-    <h4 class="app"><%=intl._("Hidden Services of Interest")%></h4>
+    <h4 class="app"><%=intl._t("Hidden Services of Interest")%></h4>
     <jsp:getProperty name="homehelper" property="favorites" /><br>
   </div>
   <div class="ag2">
-    <h4 class="app2"><%=intl._("Applications and Configuration")%></h4>
+    <h4 class="app2"><%=intl._t("Applications and Configuration")%></h4>
     <jsp:getProperty name="homehelper" property="services" /><br>
     <div class="clearer">&nbsp;</div>
   </div>
diff --git a/apps/routerconsole/jsp/i2ptunnelmgr.jsp b/apps/routerconsole/jsp/i2ptunnelmgr.jsp
index 45ff895a6c..a4a5ff6b75 100644
--- a/apps/routerconsole/jsp/i2ptunnelmgr.jsp
+++ b/apps/routerconsole/jsp/i2ptunnelmgr.jsp
@@ -52,11 +52,11 @@
 
 <%@include file="summary.jsi" %>
 
-<h1><%=intl._("Hidden Services Manager")%> <span class="newtab"><a href="/i2ptunnel/" target="_blank" title="<%=intl._("Open in new tab")%>"><img src="<%=intl.getTheme(request.getHeader("User-Agent"))%>images/newtab.png" /></a></span></h1>
+<h1><%=intl._t("Hidden Services Manager")%> <span class="newtab"><a href="/i2ptunnel/" target="_blank" title="<%=intl._t("Open in new tab")%>"><img src="<%=intl.getTheme(request.getHeader("User-Agent"))%>images/newtab.png" /></a></span></h1>
 <div class="main" id="main">
 <iframe src="/i2ptunnel/" width="100%" height="100%" frameborder="0" border="0" name="i2ptunnelframe" id="i2ptunnelframe" onload="setupFrame()" allowtransparency="true">
-<%=intl._("Your browser does not support iFrames.")%>
-&nbsp;<a href="/i2ptunnel/"><%=intl._("Click here to continue.")%></a>
+<%=intl._t("Your browser does not support iFrames.")%>
+&nbsp;<a href="/i2ptunnel/"><%=intl._t("Click here to continue.")%></a>
 </iframe>
 </div></body></html>
 <%
diff --git a/apps/routerconsole/jsp/jobs.jsp b/apps/routerconsole/jsp/jobs.jsp
index b9b8d21bf4..c77ba192ec 100644
--- a/apps/routerconsole/jsp/jobs.jsp
+++ b/apps/routerconsole/jsp/jobs.jsp
@@ -9,7 +9,7 @@
 <script src="/js/ajax.js" type="text/javascript"></script>
 <%@include file="summaryajax.jsi" %>
 </head><body onload="initAjax()">
-<%@include file="summary.jsi" %><h1><%=intl._("I2P Router Job Queue")%></h1>
+<%@include file="summary.jsi" %><h1><%=intl._t("I2P Router Job Queue")%></h1>
 <div class="main" id="main">
  <jsp:useBean class="net.i2p.router.web.JobQueueHelper" id="jobQueueHelper" scope="request" />
  <jsp:setProperty name="jobQueueHelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
diff --git a/apps/routerconsole/jsp/logs.jsp b/apps/routerconsole/jsp/logs.jsp
index 99d518cbbd..8840545f24 100644
--- a/apps/routerconsole/jsp/logs.jsp
+++ b/apps/routerconsole/jsp/logs.jsp
@@ -9,18 +9,18 @@
 <%@include file="summaryajax.jsi" %>
 </head><body onload="initAjax()">
 <%@include file="summary.jsi" %>
-<h1><%=intl._("I2P Router Logs")%></h1>
+<h1><%=intl._t("I2P Router Logs")%></h1>
 <div class="main" id="main">
-<div class="joblog"><h3><%=intl._("I2P Version and Running Environment")%></h3><a name="version"> </a>
+<div class="joblog"><h3><%=intl._t("I2P Version and Running Environment")%></h3><a name="version"> </a>
 <p>
 <% /* note to translators - both parameters are URLs */
-%><%=intl._("Please report bugs on {0} or {1}.",
+%><%=intl._t("Please report bugs on {0} or {1}.",
           "<a href=\"http://trac.i2p2.i2p/newticket\">trac.i2p2.i2p</a>",
           "<a href=\"https://trac.i2p2.de/newticket\">trac.i2p2.de</a>")%>
 <!--
-<%=intl._("You may use the username \"guest\" and password \"guest\" if you do not wish to register.")%>
+<%=intl._t("You may use the username \"guest\" and password \"guest\" if you do not wish to register.")%>
 -->
-<p><i><%=intl._("Please include this information in bug reports")%>:</i>
+<p><i><%=intl._t("Please include this information in bug reports")%>:</i>
  <p>
 <b>I2P version:</b> <%=net.i2p.router.RouterVersion.FULL_VERSION%><br>
 <b>Java version:</b> <%=System.getProperty("java.vendor")%> <%=System.getProperty("java.version")%> (<%=System.getProperty("java.runtime.name")%> <%=System.getProperty("java.runtime.version")%>)<br>
@@ -36,13 +36,13 @@
 <b>Encoding:</b> <%=System.getProperty("file.encoding")%><br>
 <b>Charset:</b> <%=java.nio.charset.Charset.defaultCharset().name()%><br>
 </p>
-<p><%=intl._("Note that system information, log timestamps, and log messages may provide clues to your location; please review everything you include in a bug report.")%></p>
-<h3><%=intl._("Critical Logs")%></h3><a name="criticallogs"> </a>
+<p><%=intl._t("Note that system information, log timestamps, and log messages may provide clues to your location; please review everything you include in a bug report.")%></p>
+<h3><%=intl._t("Critical Logs")%></h3><a name="criticallogs"> </a>
  <jsp:getProperty name="logsHelper" property="criticalLogs" />
-<h3><%=intl._("Router Logs")%> (<a href="configlogging"><%=intl._("configure")%></a>)</h3>
+<h3><%=intl._t("Router Logs")%> (<a href="configlogging"><%=intl._t("configure")%></a>)</h3>
  <jsp:getProperty name="logsHelper" property="logs" />
-<h3><%=intl._("Event Logs")%></h3>
- <a href="events"><%=intl._("View event logs")%></a>
-<h3><%=intl._("Service (Wrapper) Logs")%></h3><a name="servicelogs"> </a>
+<h3><%=intl._t("Event Logs")%></h3>
+ <a href="events"><%=intl._t("View event logs")%></a>
+<h3><%=intl._t("Service (Wrapper) Logs")%></h3><a name="servicelogs"> </a>
  <jsp:getProperty name="logsHelper" property="serviceLogs" />
 </div></div></body></html>
diff --git a/apps/routerconsole/jsp/netdb.jsp b/apps/routerconsole/jsp/netdb.jsp
index 15231ec852..1b9be5d03f 100644
--- a/apps/routerconsole/jsp/netdb.jsp
+++ b/apps/routerconsole/jsp/netdb.jsp
@@ -10,7 +10,7 @@
 <%@include file="summaryajax.jsi" %>
 </head><body onload="initAjax()">
 <%@include file="summary.jsi" %>
-<h1><%=intl._("I2P Network Database")%></h1>
+<h1><%=intl._t("I2P Network Database")%></h1>
 <div class="main" id="main">
  <div class="wideload">
  <jsp:useBean class="net.i2p.router.web.NetDbHelper" id="netdbHelper" scope="request" />
diff --git a/apps/routerconsole/jsp/news.jsp b/apps/routerconsole/jsp/news.jsp
index 422c8b48fa..f85836a40f 100644
--- a/apps/routerconsole/jsp/news.jsp
+++ b/apps/routerconsole/jsp/news.jsp
@@ -9,7 +9,7 @@
 <%@include file="summaryajax.jsi" %>
 </head><body onload="initAjax()">
 <%@include file="summary.jsi" %>
-<h1><%=intl._("Latest News")%></h1>
+<h1><%=intl._t("Latest News")%></h1>
 <div class="main" id="main">
 <jsp:useBean class="net.i2p.router.web.NewsFeedHelper" id="feedHelper" scope="request" />
 <jsp:setProperty name="feedHelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
diff --git a/apps/routerconsole/jsp/nowebapp.jsp b/apps/routerconsole/jsp/nowebapp.jsp
index c94866ce3c..8d3e227683 100644
--- a/apps/routerconsole/jsp/nowebapp.jsp
+++ b/apps/routerconsole/jsp/nowebapp.jsp
@@ -11,8 +11,8 @@
 <%@include file="summaryajax.jsi" %>
 </head><body onload="initAjax()">
 <%@include file="summary.jsi" %>
-<h1><%=intl._("Web Application Not Running")%></h1>
+<h1><%=intl._t("Web Application Not Running")%></h1>
 <div class="sorry" id="warning">
-<%=intl._("The requested web application is not running.")%>
-<%=intl._("Please visit the {0}config clients page{1} to start it.", "<a href=\"/configclients.jsp#webapp\" target=\"_top\">", "</a>")%>
+<%=intl._t("The requested web application is not running.")%>
+<%=intl._t("Please visit the {0}config clients page{1} to start it.", "<a href=\"/configclients.jsp#webapp\" target=\"_top\">", "</a>")%>
 </div></body></html>
diff --git a/apps/routerconsole/jsp/peers.jsp b/apps/routerconsole/jsp/peers.jsp
index 0fd2fa9cb3..70cb9d93ea 100644
--- a/apps/routerconsole/jsp/peers.jsp
+++ b/apps/routerconsole/jsp/peers.jsp
@@ -10,7 +10,7 @@
 <%@include file="summaryajax.jsi" %>
 </head><body onload="initAjax()">
 <%@include file="summary.jsi" %>
-<h1><%=intl._("I2P Network Peers")%></h1>
+<h1><%=intl._t("I2P Network Peers")%></h1>
 <div class="main" id="main"><div class="wideload">
  <jsp:useBean class="net.i2p.router.web.PeerHelper" id="peerHelper" scope="request" />
  <jsp:setProperty name="peerHelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
diff --git a/apps/routerconsole/jsp/profiles.jsp b/apps/routerconsole/jsp/profiles.jsp
index 725be7a43d..c2ffaba3e8 100644
--- a/apps/routerconsole/jsp/profiles.jsp
+++ b/apps/routerconsole/jsp/profiles.jsp
@@ -10,7 +10,7 @@
 <%@include file="summaryajax.jsi" %>
 </head><body onload="initAjax()">
 <%@include file="summary.jsi" %>
-<h1><%=intl._("I2P Network Peer Profiles")%></h1>
+<h1><%=intl._t("I2P Network Peer Profiles")%></h1>
 <div class="main" id="main"><div class="wideload">
  <jsp:useBean class="net.i2p.router.web.ProfilesHelper" id="profilesHelper" scope="request" />
  <jsp:setProperty name="profilesHelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
diff --git a/apps/routerconsole/jsp/stats.jsp b/apps/routerconsole/jsp/stats.jsp
index cf87ed3838..ac53608e2b 100644
--- a/apps/routerconsole/jsp/stats.jsp
+++ b/apps/routerconsole/jsp/stats.jsp
@@ -14,7 +14,7 @@
 <jsp:setProperty name="oldhelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
 <% oldhelper.storeWriter(out); %>
 <jsp:setProperty name="oldhelper" property="full" value="<%=request.getParameter(\"f\")%>" />
- <h1><%=intl._("I2P Router Statistics")%></h1>
+ <h1><%=intl._t("I2P Router Statistics")%></h1>
 <div class="main" id="main">
  <jsp:getProperty name="oldhelper" property="stats" />
 <hr></div></body></html>
diff --git a/apps/routerconsole/jsp/summary.jsi b/apps/routerconsole/jsp/summary.jsi
index d9f62f247d..9768d95854 100644
--- a/apps/routerconsole/jsp/summary.jsi
+++ b/apps/routerconsole/jsp/summary.jsi
@@ -42,7 +42,7 @@
     } else {
         // Text browsers don't render the two divs side-by-side, so just provide a link
         out.print("<a href=\"/summaryframe\">");
-        out.print(intl._("Summary Bar"));
+        out.print(intl._t("Summary Bar"));
         out.print("</a>");
     }
 
@@ -55,11 +55,11 @@
         out.print("<noscript><div class=\"refresh\"><form action=\"" + request.getRequestURI() + "\" method=\"POST\">\n" +
                   "<b>");
         // We have intl defined when this is included, but not when compiled standalone.
-        out.print(intl._("Refresh (s)"));
+        out.print(intl._t("Refresh (s)"));
         out.print(":</b> <input size=\"3\" type=\"text\" name=\"refresh\" value=\"60\" >\n" +
                   "<button type=\"submit\" value=\"Enable\" >");
         // ditto
-        out.print(intl._("Enable"));
+        out.print(intl._t("Enable"));
         out.print("</button>\n" +
                   "</form></div></noscript></div>\n");
     } else {
diff --git a/apps/routerconsole/jsp/summaryajax.jsi b/apps/routerconsole/jsp/summaryajax.jsi
index ebd1020c78..13abfce245 100644
--- a/apps/routerconsole/jsp/summaryajax.jsi
+++ b/apps/routerconsole/jsp/summaryajax.jsi
@@ -1,5 +1,5 @@
 <script type="text/javascript">
-  var failMessage = "<hr><b><%=intl._("Router is down")%><\/b>";
+  var failMessage = "<hr><b><%=intl._t("Router is down")%><\/b>";
   function requestAjax1() { ajax("/xhr1.jsp?requestURI=<%=request.getRequestURI()%>", "xhr", <%=intl.getRefresh()%>000); }
   function initAjax() { setTimeout(requestAjax1, <%=intl.getRefresh()%>000);  }
 </script>
diff --git a/apps/routerconsole/jsp/summaryframe.jsp b/apps/routerconsole/jsp/summaryframe.jsp
index cb27feab22..3107bb96a9 100644
--- a/apps/routerconsole/jsp/summaryframe.jsp
+++ b/apps/routerconsole/jsp/summaryframe.jsp
@@ -68,10 +68,10 @@
         out.print("<hr>\n<div class=\"refresh\"><form action=\"summaryframe.jsp\" method=\"POST\">\n");
         if (intl.getDisableRefresh()) {
             out.print("<b>");
-            out.print(intl._("Refresh (s)"));
+            out.print(intl._t("Refresh (s)"));
             out.print(":</b> <input size=\"3\" type=\"text\" name=\"refresh\" value=\"60\" >\n");
             out.print("<button type=\"submit\" value=\"Enable\" >");
-            out.print(intl._("Enable"));
+            out.print(intl._t("Enable"));
         } else {
             // this will load in the iframe but subsequent pages will not have the iframe
             out.print("<input type=\"hidden\" name=\"refresh\" value=\"0\" >\n");
@@ -81,7 +81,7 @@
                 refreshMS = 1000 * Long.parseLong(d);
             } catch (NumberFormatException nfe) {}
             String refreshTime = net.i2p.data.DataHelper.formatDuration2(refreshMS);
-            out.print(intl._("Disable {0} Refresh", refreshTime));
+            out.print(intl._t("Disable {0} Refresh", refreshTime));
         }
         out.print("</button></form></div>\n");
     }
diff --git a/apps/routerconsole/jsp/summarynoframe.jsi b/apps/routerconsole/jsp/summarynoframe.jsi
index 6fae7c9016..69ac9afd0d 100644
--- a/apps/routerconsole/jsp/summarynoframe.jsi
+++ b/apps/routerconsole/jsp/summarynoframe.jsi
@@ -8,7 +8,7 @@
 %>
   <div style="height: 36px;">
    <a href="/" target="_top">
-    <img src="<%=intl.getTheme(request.getHeader("User-Agent"))%>images/i2plogo.png" alt="<%=intl._("I2P Router Console")%>" title="<%=intl._("I2P Router Console")%>">
+    <img src="<%=intl.getTheme(request.getHeader("User-Agent"))%>images/i2plogo.png" alt="<%=intl._t("I2P Router Console")%>" title="<%=intl._t("I2P Router Console")%>">
    </a>
   </div>
   <div id="xhr">
diff --git a/apps/routerconsole/jsp/torrents.jsp b/apps/routerconsole/jsp/torrents.jsp
index 7f4e8fd534..7ac23775c5 100644
--- a/apps/routerconsole/jsp/torrents.jsp
+++ b/apps/routerconsole/jsp/torrents.jsp
@@ -30,11 +30,11 @@
 
 <%@include file="summary.jsi" %>
 
-<h1><%=intl._("I2P Torrent Downloader")%> <span class="newtab"><a href="/i2psnark/" target="_blank" title="<%=intl._("Open in new tab")%>"><img src="<%=intl.getTheme(request.getHeader("User-Agent"))%>images/newtab.png" /></a></span></h1>
+<h1><%=intl._t("I2P Torrent Downloader")%> <span class="newtab"><a href="/i2psnark/" target="_blank" title="<%=intl._t("Open in new tab")%>"><img src="<%=intl.getTheme(request.getHeader("User-Agent"))%>images/newtab.png" /></a></span></h1>
 <div class="main" id="main">
 <iframe src="/i2psnark/" width="100%" height="100%" frameborder="0" border="0" name="i2psnarkframe" id="i2psnarkframe" onload="setupFrame()" allowtransparency="true">
-<%=intl._("Your browser does not support iFrames.")%>
-&nbsp;<a href="/i2psnark/"><%=intl._("Click here to continue.")%></a>
+<%=intl._t("Your browser does not support iFrames.")%>
+&nbsp;<a href="/i2psnark/"><%=intl._t("Click here to continue.")%></a>
 </iframe>
 </div></body></html>
 <%
diff --git a/apps/routerconsole/jsp/tunnels.jsp b/apps/routerconsole/jsp/tunnels.jsp
index 02b6e471e2..41f25df0f8 100644
--- a/apps/routerconsole/jsp/tunnels.jsp
+++ b/apps/routerconsole/jsp/tunnels.jsp
@@ -9,7 +9,7 @@
 <script src="/js/ajax.js" type="text/javascript"></script>
 <%@include file="summaryajax.jsi" %>
 </head><body onload="initAjax()">
-<%@include file="summary.jsi" %><h1><%=intl._("I2P Tunnel Summary")%></h1>
+<%@include file="summary.jsi" %><h1><%=intl._t("I2P Tunnel Summary")%></h1>
 <div class="main" id="main">
  <jsp:useBean class="net.i2p.router.web.TunnelHelper" id="tunnelHelper" scope="request" />
  <jsp:setProperty name="tunnelHelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
diff --git a/apps/routerconsole/jsp/viewprofile.jsp b/apps/routerconsole/jsp/viewprofile.jsp
index c353bbaf60..693d003501 100644
--- a/apps/routerconsole/jsp/viewprofile.jsp
+++ b/apps/routerconsole/jsp/viewprofile.jsp
@@ -10,7 +10,7 @@
 <%@include file="summaryajax.jsi" %>
 </head><body onload="initAjax()">
 <%@include file="summary.jsi" %>
-<h1><%=intl._("Peer Profile")%></h1>
+<h1><%=intl._t("Peer Profile")%></h1>
 <div class="main" id="main"><div class="wideload">
 <%
     String peerB64 = request.getParameter("peer");
@@ -24,7 +24,7 @@
 <jsp:setProperty name="stathelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
 <jsp:setProperty name="stathelper" property="peer" value="<%=peerB64%>" />
 <% stathelper.storeWriter(out); %>
-<h2><%=intl._("Profile for peer {0}", peerB64)%></h2>
+<h2><%=intl._t("Profile for peer {0}", peerB64)%></h2>
 <pre>
 <jsp:getProperty name="stathelper" property="profile" />
 </pre>
diff --git a/apps/routerconsole/jsp/webmail.jsp b/apps/routerconsole/jsp/webmail.jsp
index f287996c5d..ad7abe05e1 100644
--- a/apps/routerconsole/jsp/webmail.jsp
+++ b/apps/routerconsole/jsp/webmail.jsp
@@ -30,11 +30,11 @@
 
 <%@include file="summary.jsi" %>
 
-<h1><%=intl._("I2P Webmail")%> <span class="newtab"><a href="/susimail/susimail" target="_blank" title="<%=intl._("Open in new tab")%>"><img src="<%=intl.getTheme(request.getHeader("User-Agent"))%>images/newtab.png" /></a></span></h1>
+<h1><%=intl._t("I2P Webmail")%> <span class="newtab"><a href="/susimail/susimail" target="_blank" title="<%=intl._t("Open in new tab")%>"><img src="<%=intl.getTheme(request.getHeader("User-Agent"))%>images/newtab.png" /></a></span></h1>
 <div class="main" id="main">
 <iframe src="/susimail/susimail" width="100%" height="100%" frameborder="0" border="0" name="susimailframe" id="susimailframe" onload="setupFrame()" allowtransparency="true">
-<%=intl._("Your browser does not support iFrames.")%>
-&nbsp;<a href="/susimail/susimail"><%=intl._("Click here to continue.")%></a>
+<%=intl._t("Your browser does not support iFrames.")%>
+&nbsp;<a href="/susimail/susimail"><%=intl._t("Click here to continue.")%></a>
 </iframe>
 </div></body></html>
 <%
diff --git a/apps/routerconsole/locale/messages_ar.po b/apps/routerconsole/locale/messages_ar.po
index 408645877e..8ff6cae97f 100644
--- a/apps/routerconsole/locale/messages_ar.po
+++ b/apps/routerconsole/locale/messages_ar.po
@@ -574,7 +574,7 @@ msgstr "عتبة بداية بطيئة"
 msgid "The round trip time in milliseconds"
 msgstr "الوقت الذهاب وإياب في جزء ثانية"
 
-#. "<b id=\"def.dev\">").append(_("Dev")).append("</b>: ").append(_("The
+#. "<b id=\"def.dev\">").append(_t("Dev")).append("</b>: ").append(_t("The
 #. standard deviation of the round trip time in
 #. milliseconds")).append("<br>\n" +
 #: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:746
@@ -3629,7 +3629,7 @@ msgstr[5] ""
 msgid "Plugin update check complete"
 msgstr ""
 
-#. buf.append("<h2>").append(_("Peer Profiles")).append("</h2>\n<p>");
+#. buf.append("<h2>").append(_t("Peer Profiles")).append("</h2>\n<p>");
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:79
 #, java-format
 msgid "Showing 1 recent profile."
diff --git a/apps/routerconsole/locale/messages_cs.po b/apps/routerconsole/locale/messages_cs.po
index 761950db60..936a8da837 100644
--- a/apps/routerconsole/locale/messages_cs.po
+++ b/apps/routerconsole/locale/messages_cs.po
@@ -545,7 +545,7 @@ msgstr "Pomalý start prahu."
 msgid "The round trip time in milliseconds"
 msgstr "Round trip time v milisekundách"
 
-#. "<b id=\"def.dev\">").append(_("Dev")).append("</b>: ").append(_("The
+#. "<b id=\"def.dev\">").append(_t("Dev")).append("</b>: ").append(_t("The
 #. standard deviation of the round trip time in
 #. milliseconds")).append("<br>\n" +
 #: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:746
@@ -3582,7 +3582,7 @@ msgstr[2] ""
 msgid "Plugin update check complete"
 msgstr ""
 
-#. buf.append("<h2>").append(_("Peer Profiles")).append("</h2>\n<p>");
+#. buf.append("<h2>").append(_t("Peer Profiles")).append("</h2>\n<p>");
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:79
 #, java-format
 msgid "Showing 1 recent profile."
diff --git a/apps/routerconsole/locale/messages_da.po b/apps/routerconsole/locale/messages_da.po
index 033b936fe2..35a47e2058 100644
--- a/apps/routerconsole/locale/messages_da.po
+++ b/apps/routerconsole/locale/messages_da.po
@@ -537,7 +537,7 @@ msgstr "Den langsomme starttilstand"
 msgid "The round trip time in milliseconds"
 msgstr "Fra start til slut i millisekunder"
 
-#. "<b id=\"def.dev\">").append(_("Dev")).append("</b>: ").append(_("The
+#. "<b id=\"def.dev\">").append(_t("Dev")).append("</b>: ").append(_t("The
 #. standard deviation of the round trip time in
 #. milliseconds")).append("<br>\n" +
 #: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:746
@@ -3568,7 +3568,7 @@ msgstr[1] "{0} plugins opdateret"
 msgid "Plugin update check complete"
 msgstr "Plugin opdatering tjek komplet"
 
-#. buf.append("<h2>").append(_("Peer Profiles")).append("</h2>\n<p>");
+#. buf.append("<h2>").append(_t("Peer Profiles")).append("</h2>\n<p>");
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:79
 #, java-format
 msgid "Showing 1 recent profile."
diff --git a/apps/routerconsole/locale/messages_de.po b/apps/routerconsole/locale/messages_de.po
index a046a32016..993d8c9ec4 100644
--- a/apps/routerconsole/locale/messages_de.po
+++ b/apps/routerconsole/locale/messages_de.po
@@ -552,7 +552,7 @@ msgstr "Grenzwert zum verzögertem Starten"
 msgid "The round trip time in milliseconds"
 msgstr "Rundenzeit zum Server und zurück in Millisekunden"
 
-#. "<b id=\"def.dev\">").append(_("Dev")).append("</b>: ").append(_("The
+#. "<b id=\"def.dev\">").append(_t("Dev")).append("</b>: ").append(_t("The
 #. standard deviation of the round trip time in
 #. milliseconds")).append("<br>\n" +
 #: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:746
@@ -3583,7 +3583,7 @@ msgstr[1] "{0} Zusatzprogramme aktualisiert"
 msgid "Plugin update check complete"
 msgstr "Überprüfung auf Aktualisierungen der Zusatzprogramme abgeschlossen"
 
-#. buf.append("<h2>").append(_("Peer Profiles")).append("</h2>\n<p>");
+#. buf.append("<h2>").append(_t("Peer Profiles")).append("</h2>\n<p>");
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:79
 #, java-format
 msgid "Showing 1 recent profile."
diff --git a/apps/routerconsole/locale/messages_el.po b/apps/routerconsole/locale/messages_el.po
index 48966945f3..a437273bca 100644
--- a/apps/routerconsole/locale/messages_el.po
+++ b/apps/routerconsole/locale/messages_el.po
@@ -540,7 +540,7 @@ msgstr "Το κατώφλι αργής εκκίνησης"
 msgid "The round trip time in milliseconds"
 msgstr ""
 
-#. "<b id=\"def.dev\">").append(_("Dev")).append("</b>: ").append(_("The
+#. "<b id=\"def.dev\">").append(_t("Dev")).append("</b>: ").append(_t("The
 #. standard deviation of the round trip time in
 #. milliseconds")).append("<br>\n" +
 #: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:746
@@ -3571,7 +3571,7 @@ msgstr[1] "{0} πρόσθετα ενημερώθηκαν"
 msgid "Plugin update check complete"
 msgstr "Ολοκλήρωση ελέγχου για ενημερώσεις πρόσθετων"
 
-#. buf.append("<h2>").append(_("Peer Profiles")).append("</h2>\n<p>");
+#. buf.append("<h2>").append(_t("Peer Profiles")).append("</h2>\n<p>");
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:79
 #, java-format
 msgid "Showing 1 recent profile."
diff --git a/apps/routerconsole/locale/messages_en.po b/apps/routerconsole/locale/messages_en.po
index 8751c55b01..c6299df22d 100644
--- a/apps/routerconsole/locale/messages_en.po
+++ b/apps/routerconsole/locale/messages_en.po
@@ -525,7 +525,7 @@ msgstr ""
 msgid "The round trip time in milliseconds"
 msgstr ""
 
-#. "<b id=\"def.dev\">").append(_("Dev")).append("</b>: ").append(_("The standard deviation of the round trip time in milliseconds")).append("<br>\n" +
+#. "<b id=\"def.dev\">").append(_t("Dev")).append("</b>: ").append(_t("The standard deviation of the round trip time in milliseconds")).append("<br>\n" +
 #: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:746
 msgid "The retransmit timeout in milliseconds"
 msgstr ""
@@ -3547,7 +3547,7 @@ msgstr[1] ""
 msgid "Plugin update check complete"
 msgstr ""
 
-#. buf.append("<h2>").append(_("Peer Profiles")).append("</h2>\n<p>");
+#. buf.append("<h2>").append(_t("Peer Profiles")).append("</h2>\n<p>");
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:79
 #, java-format
 msgid "Showing 1 recent profile."
diff --git a/apps/routerconsole/locale/messages_es.po b/apps/routerconsole/locale/messages_es.po
index ce6316f265..c5be1e480d 100644
--- a/apps/routerconsole/locale/messages_es.po
+++ b/apps/routerconsole/locale/messages_es.po
@@ -549,7 +549,7 @@ msgstr "El umbral del algoritmo de comienzo lento"
 msgid "The round trip time in milliseconds"
 msgstr "El periodo de ida y vuelta en milisegundos"
 
-#. "<b id=\"def.dev\">").append(_("Dev")).append("</b>: ").append(_("The
+#. "<b id=\"def.dev\">").append(_t("Dev")).append("</b>: ").append(_t("The
 #. standard deviation of the round trip time in
 #. milliseconds")).append("<br>\n" +
 #: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:746
@@ -3580,7 +3580,7 @@ msgstr[1] "{0} complementos actualizados"
 msgid "Plugin update check complete"
 msgstr "Búsqueda de actualizaciones de complementos finalizada"
 
-#. buf.append("<h2>").append(_("Peer Profiles")).append("</h2>\n<p>");
+#. buf.append("<h2>").append(_t("Peer Profiles")).append("</h2>\n<p>");
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:79
 #, java-format
 msgid "Showing 1 recent profile."
diff --git a/apps/routerconsole/locale/messages_et.po b/apps/routerconsole/locale/messages_et.po
index b74f6802d7..a0f34f2b09 100644
--- a/apps/routerconsole/locale/messages_et.po
+++ b/apps/routerconsole/locale/messages_et.po
@@ -536,7 +536,7 @@ msgstr "Aeglase käivitumise lävi"
 msgid "The round trip time in milliseconds"
 msgstr "Saatmise-kinnituse aeg millisekundites"
 
-#. "<b id=\"def.dev\">").append(_("Dev")).append("</b>: ").append(_("The
+#. "<b id=\"def.dev\">").append(_t("Dev")).append("</b>: ").append(_t("The
 #. standard deviation of the round trip time in
 #. milliseconds")).append("<br>\n" +
 #: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:746
@@ -3567,7 +3567,7 @@ msgstr[1] ""
 msgid "Plugin update check complete"
 msgstr "Plugina uuenduse kontroll sooritatud"
 
-#. buf.append("<h2>").append(_("Peer Profiles")).append("</h2>\n<p>");
+#. buf.append("<h2>").append(_t("Peer Profiles")).append("</h2>\n<p>");
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:79
 #, java-format
 msgid "Showing 1 recent profile."
diff --git a/apps/routerconsole/locale/messages_fi.po b/apps/routerconsole/locale/messages_fi.po
index 631881ab3c..8690dc890c 100644
--- a/apps/routerconsole/locale/messages_fi.po
+++ b/apps/routerconsole/locale/messages_fi.po
@@ -540,7 +540,7 @@ msgstr ""
 msgid "The round trip time in milliseconds"
 msgstr "Edestakaisen matkan aika millisekunneissa"
 
-#. "<b id=\"def.dev\">").append(_("Dev")).append("</b>: ").append(_("The
+#. "<b id=\"def.dev\">").append(_t("Dev")).append("</b>: ").append(_t("The
 #. standard deviation of the round trip time in
 #. milliseconds")).append("<br>\n" +
 #: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:746
@@ -3571,7 +3571,7 @@ msgstr[1] ""
 msgid "Plugin update check complete"
 msgstr ""
 
-#. buf.append("<h2>").append(_("Peer Profiles")).append("</h2>\n<p>");
+#. buf.append("<h2>").append(_t("Peer Profiles")).append("</h2>\n<p>");
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:79
 #, java-format
 msgid "Showing 1 recent profile."
diff --git a/apps/routerconsole/locale/messages_fr.po b/apps/routerconsole/locale/messages_fr.po
index 3d75da8df5..72a77b54aa 100644
--- a/apps/routerconsole/locale/messages_fr.po
+++ b/apps/routerconsole/locale/messages_fr.po
@@ -550,7 +550,7 @@ msgstr "Seuil de démarrage lent"
 msgid "The round trip time in milliseconds"
 msgstr "Aller-retour en ms"
 
-#. "<b id=\"def.dev\">").append(_("Dev")).append("</b>: ").append(_("The
+#. "<b id=\"def.dev\">").append(_t("Dev")).append("</b>: ").append(_t("The
 #. standard deviation of the round trip time in
 #. milliseconds")).append("<br>\n" +
 #: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:746
@@ -3581,7 +3581,7 @@ msgstr[1] "{0} plugins mis à jour"
 msgid "Plugin update check complete"
 msgstr "Verification de mise à jour de plugin accomplie"
 
-#. buf.append("<h2>").append(_("Peer Profiles")).append("</h2>\n<p>");
+#. buf.append("<h2>").append(_t("Peer Profiles")).append("</h2>\n<p>");
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:79
 #, java-format
 msgid "Showing 1 recent profile."
diff --git a/apps/routerconsole/locale/messages_hu.po b/apps/routerconsole/locale/messages_hu.po
index 61097fd5e6..fee1b5b084 100644
--- a/apps/routerconsole/locale/messages_hu.po
+++ b/apps/routerconsole/locale/messages_hu.po
@@ -537,7 +537,7 @@ msgstr "A lassú indítás határérték"
 msgid "The round trip time in milliseconds"
 msgstr "A körbejárási idő ezredmásodpercben."
 
-#. "<b id=\"def.dev\">").append(_("Dev")).append("</b>: ").append(_("The
+#. "<b id=\"def.dev\">").append(_t("Dev")).append("</b>: ").append(_t("The
 #. standard deviation of the round trip time in
 #. milliseconds")).append("<br>\n" +
 #: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:746
@@ -3568,7 +3568,7 @@ msgstr[1] "{0} kiegészítő lett frissítve"
 msgid "Plugin update check complete"
 msgstr "Kiegészítők frissítéseinek ellenőrzése elkészült"
 
-#. buf.append("<h2>").append(_("Peer Profiles")).append("</h2>\n<p>");
+#. buf.append("<h2>").append(_t("Peer Profiles")).append("</h2>\n<p>");
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:79
 #, java-format
 msgid "Showing 1 recent profile."
diff --git a/apps/routerconsole/locale/messages_it.po b/apps/routerconsole/locale/messages_it.po
index 4643d2b4c6..931aa5c65d 100644
--- a/apps/routerconsole/locale/messages_it.po
+++ b/apps/routerconsole/locale/messages_it.po
@@ -551,7 +551,7 @@ msgstr "La soglia di avvio lento"
 msgid "The round trip time in milliseconds"
 msgstr "Tempo di ciclo in millisecondi"
 
-#. "<b id=\"def.dev\">").append(_("Dev")).append("</b>: ").append(_("The
+#. "<b id=\"def.dev\">").append(_t("Dev")).append("</b>: ").append(_t("The
 #. standard deviation of the round trip time in
 #. milliseconds")).append("<br>\n" +
 #: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:746
@@ -3582,7 +3582,7 @@ msgstr[1] "{0} plugin aggiornati"
 msgid "Plugin update check complete"
 msgstr "Controllo nuovi aggiornamenti plugin completato"
 
-#. buf.append("<h2>").append(_("Peer Profiles")).append("</h2>\n<p>");
+#. buf.append("<h2>").append(_t("Peer Profiles")).append("</h2>\n<p>");
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:79
 #, java-format
 msgid "Showing 1 recent profile."
diff --git a/apps/routerconsole/locale/messages_ja.po b/apps/routerconsole/locale/messages_ja.po
index 0031b451d7..dd3e9b6348 100644
--- a/apps/routerconsole/locale/messages_ja.po
+++ b/apps/routerconsole/locale/messages_ja.po
@@ -534,7 +534,7 @@ msgstr "スロースタートしきい値"
 msgid "The round trip time in milliseconds"
 msgstr "ミリ秒単位往復時間"
 
-#. "<b id=\"def.dev\">").append(_("Dev")).append("</b>: ").append(_("The
+#. "<b id=\"def.dev\">").append(_t("Dev")).append("</b>: ").append(_t("The
 #. standard deviation of the round trip time in
 #. milliseconds")).append("<br>\n" +
 #: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:746
@@ -3559,7 +3559,7 @@ msgstr[0] "{0} 個のプラグインをアップデートしました"
 msgid "Plugin update check complete"
 msgstr "プラグインのアップデート確認完了"
 
-#. buf.append("<h2>").append(_("Peer Profiles")).append("</h2>\n<p>");
+#. buf.append("<h2>").append(_t("Peer Profiles")).append("</h2>\n<p>");
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:79
 #, java-format
 msgid "Showing 1 recent profile."
diff --git a/apps/routerconsole/locale/messages_nb.po b/apps/routerconsole/locale/messages_nb.po
index d0dae71aef..6eb9abad32 100644
--- a/apps/routerconsole/locale/messages_nb.po
+++ b/apps/routerconsole/locale/messages_nb.po
@@ -539,7 +539,7 @@ msgstr ""
 msgid "The round trip time in milliseconds"
 msgstr "Rundtur i millisekunder"
 
-#. "<b id=\"def.dev\">").append(_("Dev")).append("</b>: ").append(_("The
+#. "<b id=\"def.dev\">").append(_t("Dev")).append("</b>: ").append(_t("The
 #. standard deviation of the round trip time in
 #. milliseconds")).append("<br>\n" +
 #: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:746
@@ -3570,7 +3570,7 @@ msgstr[1] ""
 msgid "Plugin update check complete"
 msgstr ""
 
-#. buf.append("<h2>").append(_("Peer Profiles")).append("</h2>\n<p>");
+#. buf.append("<h2>").append(_t("Peer Profiles")).append("</h2>\n<p>");
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:79
 #, java-format
 msgid "Showing 1 recent profile."
diff --git a/apps/routerconsole/locale/messages_nl.po b/apps/routerconsole/locale/messages_nl.po
index 3ae1204af5..f77331c855 100644
--- a/apps/routerconsole/locale/messages_nl.po
+++ b/apps/routerconsole/locale/messages_nl.po
@@ -549,7 +549,7 @@ msgstr "De vertraagde-start drempel"
 msgid "The round trip time in milliseconds"
 msgstr "De rondgangstijd in milliseconden"
 
-#. "<b id=\"def.dev\">").append(_("Dev")).append("</b>: ").append(_("The
+#. "<b id=\"def.dev\">").append(_t("Dev")).append("</b>: ").append(_t("The
 #. standard deviation of the round trip time in
 #. milliseconds")).append("<br>\n" +
 #: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:746
@@ -3580,7 +3580,7 @@ msgstr[1] "{0} plugins geupdate"
 msgid "Plugin update check complete"
 msgstr "Plugin update check voltooid"
 
-#. buf.append("<h2>").append(_("Peer Profiles")).append("</h2>\n<p>");
+#. buf.append("<h2>").append(_t("Peer Profiles")).append("</h2>\n<p>");
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:79
 #, java-format
 msgid "Showing 1 recent profile."
diff --git a/apps/routerconsole/locale/messages_pl.po b/apps/routerconsole/locale/messages_pl.po
index df958ab9a1..edc8c64214 100644
--- a/apps/routerconsole/locale/messages_pl.po
+++ b/apps/routerconsole/locale/messages_pl.po
@@ -556,7 +556,7 @@ msgstr "Próg powolnego startu"
 msgid "The round trip time in milliseconds"
 msgstr "Czas podróży w obie strony w milisekundach"
 
-#. "<b id=\"def.dev\">").append(_("Dev")).append("</b>: ").append(_("The
+#. "<b id=\"def.dev\">").append(_t("Dev")).append("</b>: ").append(_t("The
 #. standard deviation of the round trip time in
 #. milliseconds")).append("<br>\n" +
 #: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:746
@@ -3593,7 +3593,7 @@ msgstr[2] "{0} wtyczek zaktualizowanych"
 msgid "Plugin update check complete"
 msgstr "Sprawdzanie dostępności aktualizacji dla wtyczek zakończone"
 
-#. buf.append("<h2>").append(_("Peer Profiles")).append("</h2>\n<p>");
+#. buf.append("<h2>").append(_t("Peer Profiles")).append("</h2>\n<p>");
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:79
 #, java-format
 msgid "Showing 1 recent profile."
diff --git a/apps/routerconsole/locale/messages_pt.po b/apps/routerconsole/locale/messages_pt.po
index 578d5d32bf..4348fff98b 100644
--- a/apps/routerconsole/locale/messages_pt.po
+++ b/apps/routerconsole/locale/messages_pt.po
@@ -559,7 +559,7 @@ msgstr "O limitador de inicio lento "
 msgid "The round trip time in milliseconds"
 msgstr "O tempo de ida e volta em milisegundos"
 
-#. "<b id=\"def.dev\">").append(_("Dev")).append("</b>: ").append(_("The
+#. "<b id=\"def.dev\">").append(_t("Dev")).append("</b>: ").append(_t("The
 #. standard deviation of the round trip time in
 #. milliseconds")).append("<br>\n" +
 #: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:746
@@ -3590,7 +3590,7 @@ msgstr[1] "{0} extensões atualizadas"
 msgid "Plugin update check complete"
 msgstr "Verificação de atualização para extensões completada"
 
-#. buf.append("<h2>").append(_("Peer Profiles")).append("</h2>\n<p>");
+#. buf.append("<h2>").append(_t("Peer Profiles")).append("</h2>\n<p>");
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:79
 #, java-format
 msgid "Showing 1 recent profile."
diff --git a/apps/routerconsole/locale/messages_pt_BR.po b/apps/routerconsole/locale/messages_pt_BR.po
index 2e17539c70..cc050e7c30 100644
--- a/apps/routerconsole/locale/messages_pt_BR.po
+++ b/apps/routerconsole/locale/messages_pt_BR.po
@@ -539,7 +539,7 @@ msgstr ""
 msgid "The round trip time in milliseconds"
 msgstr ""
 
-#. "<b id=\"def.dev\">").append(_("Dev")).append("</b>: ").append(_("The
+#. "<b id=\"def.dev\">").append(_t("Dev")).append("</b>: ").append(_t("The
 #. standard deviation of the round trip time in
 #. milliseconds")).append("<br>\n" +
 #: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:746
@@ -3570,7 +3570,7 @@ msgstr[1] ""
 msgid "Plugin update check complete"
 msgstr ""
 
-#. buf.append("<h2>").append(_("Peer Profiles")).append("</h2>\n<p>");
+#. buf.append("<h2>").append(_t("Peer Profiles")).append("</h2>\n<p>");
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:79
 #, java-format
 msgid "Showing 1 recent profile."
diff --git a/apps/routerconsole/locale/messages_ro.po b/apps/routerconsole/locale/messages_ro.po
index 785559c3b7..37f8dae463 100644
--- a/apps/routerconsole/locale/messages_ro.po
+++ b/apps/routerconsole/locale/messages_ro.po
@@ -550,7 +550,7 @@ msgstr "Start lent"
 msgid "The round trip time in milliseconds"
 msgstr "Timpul de călătorie dus-întors în milisecunde"
 
-#. "<b id=\"def.dev\">").append(_("Dev")).append("</b>: ").append(_("The
+#. "<b id=\"def.dev\">").append(_t("Dev")).append("</b>: ").append(_t("The
 #. standard deviation of the round trip time in
 #. milliseconds")).append("<br>\n" +
 #: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:746
@@ -3587,7 +3587,7 @@ msgstr[2] "{0} plug-inuri actualizate"
 msgid "Plugin update check complete"
 msgstr "Verificarea actualizarii plugin-urilor s-a terminat"
 
-#. buf.append("<h2>").append(_("Peer Profiles")).append("</h2>\n<p>");
+#. buf.append("<h2>").append(_t("Peer Profiles")).append("</h2>\n<p>");
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:79
 #, java-format
 msgid "Showing 1 recent profile."
diff --git a/apps/routerconsole/locale/messages_ru.po b/apps/routerconsole/locale/messages_ru.po
index 1ec7865025..dd6f3a303b 100644
--- a/apps/routerconsole/locale/messages_ru.po
+++ b/apps/routerconsole/locale/messages_ru.po
@@ -581,7 +581,7 @@ msgstr "<i>Slow Start Threshold</i>. Порог медленного старт
 msgid "The round trip time in milliseconds"
 msgstr "<i>Round-Trip Time</i>. Время между отправкой запроса и получением ответа (в миллисекундах)"
 
-#. "<b id=\"def.dev\">").append(_("Dev")).append("</b>: ").append(_("The
+#. "<b id=\"def.dev\">").append(_t("Dev")).append("</b>: ").append(_t("The
 #. standard deviation of the round trip time in
 #. milliseconds")).append("<br>\n" +
 #: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:746
@@ -3624,7 +3624,7 @@ msgstr[3] "{0} модулей обновлено"
 msgid "Plugin update check complete"
 msgstr "Проверка обновления модуля завершена"
 
-#. buf.append("<h2>").append(_("Peer Profiles")).append("</h2>\n<p>");
+#. buf.append("<h2>").append(_t("Peer Profiles")).append("</h2>\n<p>");
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:79
 #, java-format
 msgid "Showing 1 recent profile."
diff --git a/apps/routerconsole/locale/messages_sv.po b/apps/routerconsole/locale/messages_sv.po
index 1133087fca..e8bdf6f49a 100644
--- a/apps/routerconsole/locale/messages_sv.po
+++ b/apps/routerconsole/locale/messages_sv.po
@@ -546,7 +546,7 @@ msgstr "Den tröskel för långsam start"
 msgid "The round trip time in milliseconds"
 msgstr "Tur och returtid i millisekunder"
 
-#. "<b id=\"def.dev\">").append(_("Dev")).append("</b>: ").append(_("The
+#. "<b id=\"def.dev\">").append(_t("Dev")).append("</b>: ").append(_t("The
 #. standard deviation of the round trip time in
 #. milliseconds")).append("<br>\n" +
 #: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:746
@@ -3577,7 +3577,7 @@ msgstr[1] "{0} insticksprogram uppdaterade"
 msgid "Plugin update check complete"
 msgstr "Sökning efter uppdateringar för insticksprogram slutförd"
 
-#. buf.append("<h2>").append(_("Peer Profiles")).append("</h2>\n<p>");
+#. buf.append("<h2>").append(_t("Peer Profiles")).append("</h2>\n<p>");
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:79
 #, java-format
 msgid "Showing 1 recent profile."
diff --git a/apps/routerconsole/locale/messages_tr.po b/apps/routerconsole/locale/messages_tr.po
index b206142899..0c8ab171d7 100644
--- a/apps/routerconsole/locale/messages_tr.po
+++ b/apps/routerconsole/locale/messages_tr.po
@@ -532,7 +532,7 @@ msgstr "Yavaş başlangıç eşiği"
 msgid "The round trip time in milliseconds"
 msgstr "Milisaniye cinsinden gidiş-dönüş süresi"
 
-#. "<b id=\"def.dev\">").append(_("Dev")).append("</b>: ").append(_("The
+#. "<b id=\"def.dev\">").append(_t("Dev")).append("</b>: ").append(_t("The
 #. standard deviation of the round trip time in
 #. milliseconds")).append("<br>\n" +
 #: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:746
@@ -3557,7 +3557,7 @@ msgstr[0] "{0} uygulama eki güncellendi"
 msgid "Plugin update check complete"
 msgstr "Uygulama eki güncelleme denetimi tamamlandı"
 
-#. buf.append("<h2>").append(_("Peer Profiles")).append("</h2>\n<p>");
+#. buf.append("<h2>").append(_t("Peer Profiles")).append("</h2>\n<p>");
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:79
 #, java-format
 msgid "Showing 1 recent profile."
diff --git a/apps/routerconsole/locale/messages_uk.po b/apps/routerconsole/locale/messages_uk.po
index 1232b560bc..6784e6bcfa 100644
--- a/apps/routerconsole/locale/messages_uk.po
+++ b/apps/routerconsole/locale/messages_uk.po
@@ -559,7 +559,7 @@ msgstr "Поріг повільного старту"
 msgid "The round trip time in milliseconds"
 msgstr "Час між відправленням запиту й одержанням відповіді у мілісекундах"
 
-#. "<b id=\"def.dev\">").append(_("Dev")).append("</b>: ").append(_("The
+#. "<b id=\"def.dev\">").append(_t("Dev")).append("</b>: ").append(_t("The
 #. standard deviation of the round trip time in
 #. milliseconds")).append("<br>\n" +
 #: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:746
@@ -3596,7 +3596,7 @@ msgstr[2] ""
 msgid "Plugin update check complete"
 msgstr ""
 
-#. buf.append("<h2>").append(_("Peer Profiles")).append("</h2>\n<p>");
+#. buf.append("<h2>").append(_t("Peer Profiles")).append("</h2>\n<p>");
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:79
 #, java-format
 msgid "Showing 1 recent profile."
diff --git a/apps/routerconsole/locale/messages_vi.po b/apps/routerconsole/locale/messages_vi.po
index cc53c69c47..887594a8c5 100644
--- a/apps/routerconsole/locale/messages_vi.po
+++ b/apps/routerconsole/locale/messages_vi.po
@@ -530,7 +530,7 @@ msgstr "Ngưỡng giới hạn chậm"
 msgid "The round trip time in milliseconds"
 msgstr "Thời gian chu trình vòng tính bằng phần nghìn giây"
 
-#. "<b id=\"def.dev\">").append(_("Dev")).append("</b>: ").append(_("The
+#. "<b id=\"def.dev\">").append(_t("Dev")).append("</b>: ").append(_t("The
 #. standard deviation of the round trip time in
 #. milliseconds")).append("<br>\n" +
 #: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:746
@@ -3555,7 +3555,7 @@ msgstr[0] ""
 msgid "Plugin update check complete"
 msgstr ""
 
-#. buf.append("<h2>").append(_("Peer Profiles")).append("</h2>\n<p>");
+#. buf.append("<h2>").append(_t("Peer Profiles")).append("</h2>\n<p>");
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:79
 #, java-format
 msgid "Showing 1 recent profile."
diff --git a/apps/routerconsole/locale/messages_zh.po b/apps/routerconsole/locale/messages_zh.po
index 6176116fc8..c875ae4a5f 100644
--- a/apps/routerconsole/locale/messages_zh.po
+++ b/apps/routerconsole/locale/messages_zh.po
@@ -538,7 +538,7 @@ msgstr "慢启动门槛"
 msgid "The round trip time in milliseconds"
 msgstr "往返时间(毫秒)"
 
-#. "<b id=\"def.dev\">").append(_("Dev")).append("</b>: ").append(_("The
+#. "<b id=\"def.dev\">").append(_t("Dev")).append("</b>: ").append(_t("The
 #. standard deviation of the round trip time in
 #. milliseconds")).append("<br>\n" +
 #: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:746
@@ -3563,7 +3563,7 @@ msgstr[0] "{0} 个插件已更新"
 msgid "Plugin update check complete"
 msgstr "插件的更新检查已完成"
 
-#. buf.append("<h2>").append(_("Peer Profiles")).append("</h2>\n<p>");
+#. buf.append("<h2>").append(_t("Peer Profiles")).append("</h2>\n<p>");
 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:79
 #, java-format
 msgid "Showing 1 recent profile."
diff --git a/apps/susidns/src/bundle-messages.sh b/apps/susidns/src/bundle-messages.sh
index 02b13080b2..6ae1e111fb 100755
--- a/apps/susidns/src/bundle-messages.sh
+++ b/apps/susidns/src/bundle-messages.sh
@@ -63,15 +63,15 @@ do
 	 	echo "Updating the $i file from the tags..."
 		# extract strings from java and jsp files, and update messages.po files
 		# translate calls must be one of the forms:
-		# _("foo")
+		# _t("foo")
 		# _x("foo")
-		# intl._("foo")
+		# intl._t("foo")
 		# In a jsp, you must use a helper or handler that has the context set.
 		# To start a new translation, copy the header from an old translation to the new .po file,
 		# then ant distclean updater.
 		find $JPATHS -name *.java > $TMPFILE
 		xgettext -f $TMPFILE -F -L java --from-code=UTF-8 --add-comments\
-	                 --keyword=_ --keyword=_x --keyword=intl._ --keyword=intl.title \
+	                 --keyword=_t --keyword=_x --keyword=intl._ --keyword=intl.title \
 		         -o ${i}t
 		if [ $? -ne 0 ]
 		then
diff --git a/apps/susidns/src/java/src/i2p/susi/dns/AddressBean.java b/apps/susidns/src/java/src/i2p/susi/dns/AddressBean.java
index 70b29e72fa..9cd3821df2 100644
--- a/apps/susidns/src/java/src/i2p/susi/dns/AddressBean.java
+++ b/apps/susidns/src/java/src/i2p/susi/dns/AddressBean.java
@@ -128,7 +128,7 @@ public class AddressBean
 			    c >= 0x5b && c <= 0x60 ||
 			    c >= 0x7b && c <= 0x7f) {
 				String bad = "\"" + c + "\" (0x" + Integer.toHexString(c) + ')';
-				throw new IllegalArgumentException(_("Host name \"{0}\" contains illegal character {1}",
+				throw new IllegalArgumentException(_t("Host name \"{0}\" contains illegal character {1}",
                                                                      host, bad));
 			}
 			if (c == DOT2)
@@ -141,21 +141,21 @@ public class AddressBean
 				needsIDN = true;
 		}
 		if (host.startsWith("-"))
-			throw new IllegalArgumentException(_("Host name cannot start with \"{0}\"", "-"));
+			throw new IllegalArgumentException(_t("Host name cannot start with \"{0}\"", "-"));
 		if (host.startsWith("."))
-			throw new IllegalArgumentException(_("Host name cannot start with \"{0}\"", "."));
+			throw new IllegalArgumentException(_t("Host name cannot start with \"{0}\"", "."));
 		if (host.endsWith("-"))
-			throw new IllegalArgumentException(_("Host name cannot end with \"{0}\"", "-"));
+			throw new IllegalArgumentException(_t("Host name cannot end with \"{0}\"", "-"));
 		if (host.endsWith("."))
-			throw new IllegalArgumentException(_("Host name cannot end with \"{0}\"", "."));
+			throw new IllegalArgumentException(_t("Host name cannot end with \"{0}\"", "."));
 		if (needsIDN) {
 			if (host.startsWith("xn--"))
-				throw new IllegalArgumentException(_("Host name cannot start with \"{0}\"", "xn--"));
+				throw new IllegalArgumentException(_t("Host name cannot start with \"{0}\"", "xn--"));
 			if (host.contains(".xn--"))
-				throw new IllegalArgumentException(_("Host name cannot contain \"{0}\"", ".xn--"));
+				throw new IllegalArgumentException(_t("Host name cannot contain \"{0}\"", ".xn--"));
 			if (haveIDN)
 				return IDN.toASCII(host, IDN.ALLOW_UNASSIGNED);
-			throw new IllegalArgumentException(_("Host name \"{0}\" requires conversion to ASCII but the conversion library is unavailable in this JVM", host));
+			throw new IllegalArgumentException(_t("Host name \"{0}\" requires conversion to ASCII but the conversion library is unavailable in this JVM", host));
 		}
 		return host;
 	}
@@ -216,7 +216,7 @@ public class AddressBean
 		// (4 / 3) * (pubkey length + signing key length)
 		String cert = destination.substring(512);
                 if (cert.equals("AAAA"))
-			return _("None");
+			return _t("None");
 		byte[] enc = Base64.decode(cert);
 		if (enc == null)
 			// shouldn't happen
@@ -224,15 +224,15 @@ public class AddressBean
 		int type = enc[0] & 0xff;
 		switch (type) {
 			case Certificate.CERTIFICATE_TYPE_HASHCASH:
-				return _("Hashcash");
+				return _t("Hashcash");
 			case Certificate.CERTIFICATE_TYPE_HIDDEN:
-				return _("Hidden");
+				return _t("Hidden");
 			case Certificate.CERTIFICATE_TYPE_SIGNED:
-				return _("Signed");
+				return _t("Signed");
 			case Certificate.CERTIFICATE_TYPE_KEY:
-				return _("Key");
+				return _t("Key");
 			default:
-				return _("Type {0}", type);
+				return _t("Type {0}", type);
 		}
 	}
 
@@ -244,20 +244,20 @@ public class AddressBean
 		// (4 / 3) * (pubkey length + signing key length)
 		String cert = destination.substring(512);
 		if (cert.equals("AAAA"))
-			return _("DSA 1024 bit");
+			return _t("DSA 1024 bit");
 		byte[] enc = Base64.decode(cert);
 		if (enc == null)
 			// shouldn't happen
 			return "invalid";
 		int type = enc[0] & 0xff;
 		if (type != Certificate.CERTIFICATE_TYPE_KEY)
-			return _("DSA 1024 bit");
+			return _t("DSA 1024 bit");
 		int st = ((enc[3] & 0xff) << 8) | (enc[4] & 0xff);
 		if (st == 0)
-			return _("DSA 1024 bit");
+			return _t("DSA 1024 bit");
 		SigType stype = SigType.getByCode(st);
                 if (stype == null)
-			return _("Type {0}", st);
+			return _t("Type {0}", st);
                 return stype.toString();
 	}
 
@@ -281,17 +281,17 @@ public class AddressBean
 	}
 
 	/** translate */
-	private static String _(String s) {
+	private static String _t(String s) {
 		return Messages.getString(s);
 	}
 
 	/** translate */
-	private static String _(String s, Object o) {
+	private static String _t(String s, Object o) {
 		return Messages.getString(s, o);
 	}
 
 	/** translate */
-	private static String _(String s, Object o, Object o2) {
+	private static String _t(String s, Object o, Object o2) {
 		return Messages.getString(s, o, o2);
 	}
 }
diff --git a/apps/susidns/src/java/src/i2p/susi/dns/AddressbookBean.java b/apps/susidns/src/java/src/i2p/susi/dns/AddressbookBean.java
index 4e616e2618..360310682a 100644
--- a/apps/susidns/src/java/src/i2p/susi/dns/AddressbookBean.java
+++ b/apps/susidns/src/java/src/i2p/susi/dns/AddressbookBean.java
@@ -200,7 +200,7 @@ public class AddressbookBean extends BaseBean
 		} else {
 			if (resultCount <= 0)
 				// covered in jsp
-				//message = _("This addressbook is empty.");
+				//message = _t("This addressbook is empty.");
 				message = "";
 			else
 				message = ngettext("Address book contains 1 entry.",
@@ -219,7 +219,7 @@ public class AddressbookBean extends BaseBean
 				           "&amp;begin=" + newBegin + "&amp;end=" + newEnd + "\">" + (newBegin+1) +
 				           '-' + (newEnd+1) + "</a> | ";
 	       		}
-			message += ' ' + _("Showing {0} of {1}", "" + (getBeginInt()+1) + '-' + (getEndInt()+1), Integer.valueOf(resultCount));
+			message += ' ' + _t("Showing {0} of {1}", "" + (getBeginInt()+1) + '-' + (getEndInt()+1), Integer.valueOf(resultCount));
 			if (getEndInt() < resultCount - 1) {
 				int newBegin = Math.min(resultCount - 1, getEndInt() + 1);
 				int newEnd = Math.min(resultCount, getEndInt() + DISPLAY_SIZE);
@@ -241,7 +241,7 @@ public class AddressbookBean extends BaseBean
                         if (_context.getBooleanProperty(PROP_PW_ENABLE) ||
 			    (serial != null && serial.equals(lastSerial))) {
 				boolean changed = false;
-				if (action.equals(_("Add")) || action.equals(_("Replace"))) {
+				if (action.equals(_t("Add")) || action.equals(_t("Replace"))) {
 					if( addressbook != null && hostname != null && destination != null ) {
 						try {
 							// throws IAE with translated message
@@ -251,9 +251,9 @@ public class AddressbookBean extends BaseBean
 
 							String oldDest = (String) addressbook.get(host);
 							if (destination.equals(oldDest)) {
-								message = _("Host name {0} is already in address book, unchanged.", displayHost);
-							} else if (oldDest != null && !action.equals(_("Replace"))) {
-								message = _("Host name {0} is already in address book with a different destination. Click \"Replace\" to overwrite.", displayHost);
+								message = _t("Host name {0} is already in address book, unchanged.", displayHost);
+							} else if (oldDest != null && !action.equals(_t("Replace"))) {
+								message = _t("Host name {0} is already in address book with a different destination. Click \"Replace\" to overwrite.", displayHost);
 							} else {
 								boolean valid = true;
 								try {
@@ -266,29 +266,29 @@ public class AddressbookBean extends BaseBean
 									addressbook.put( host, destination );
 									changed = true;
 									if (oldDest == null)
-										message = _("Destination added for {0}.", displayHost);
+										message = _t("Destination added for {0}.", displayHost);
 									else
-										message = _("Destination changed for {0}.", displayHost);
+										message = _t("Destination changed for {0}.", displayHost);
 									if (!host.endsWith(".i2p"))
-										message += "<br>" + _("Warning - host name does not end with \".i2p\"");
+										message += "<br>" + _t("Warning - host name does not end with \".i2p\"");
 									// clear form
 									hostname = null;
 									destination = null;
 								} else {
-									message = _("Invalid Base 64 destination.");
+									message = _t("Invalid Base 64 destination.");
 								}
 							}
 						} catch (IllegalArgumentException iae) {
 							message = iae.getMessage();
 							if (message == null)
-								message = _("Invalid host name \"{0}\".", hostname);
+								message = _t("Invalid host name \"{0}\".", hostname);
 						}
 					} else {
-						message = _("Please enter a host name and destination");
+						message = _t("Please enter a host name and destination");
 					}
 					// clear search when adding
 					search = null;
-				} else if (action.equals(_("Delete Selected")) || action.equals(_("Delete Entry"))) {
+				} else if (action.equals(_t("Delete Selected")) || action.equals(_t("Delete Entry"))) {
 					String name = null;
 					int deleted = 0;
 					for (String n : deletionMarks) {
@@ -302,30 +302,30 @@ public class AddressbookBean extends BaseBean
 					}
 					if( changed ) {
 						if (deleted == 1)
-							message = _("Destination {0} deleted.", name);
+							message = _t("Destination {0} deleted.", name);
 						else
 							// parameter will always be >= 2
 							message = ngettext("1 destination deleted.", "{0} destinations deleted.", deleted);
 					} else {
-						message = _("No entries selected to delete.");
+						message = _t("No entries selected to delete.");
 					}
-					if (action.equals(_("Delete Entry")))
+					if (action.equals(_t("Delete Entry")))
 						search = null;
 				}
 				if( changed ) {
 					try {
 						save();
-						message += "<br>" + _("Address book saved.");
+						message += "<br>" + _t("Address book saved.");
 					} catch (Exception e) {
 						warn(e);
-						message += "<br>" + _("ERROR: Could not write addressbook file.");
+						message += "<br>" + _t("ERROR: Could not write addressbook file.");
 					}
 				}
 			}			
 			else {
-				message = _("Invalid form submission, probably because you used the \"back\" or \"reload\" button on your browser. Please resubmit.")
+				message = _t("Invalid form submission, probably because you used the \"back\" or \"reload\" button on your browser. Please resubmit.")
                                           + ' ' +
-                                          _("If the problem persists, verify that you have cookies enabled in your browser.");
+                                          _t("If the problem persists, verify that you have cookies enabled in your browser.");
 			}
 		}
 		
diff --git a/apps/susidns/src/java/src/i2p/susi/dns/BaseBean.java b/apps/susidns/src/java/src/i2p/susi/dns/BaseBean.java
index 08ca6dd313..e4449a4e08 100644
--- a/apps/susidns/src/java/src/i2p/susi/dns/BaseBean.java
+++ b/apps/susidns/src/java/src/i2p/susi/dns/BaseBean.java
@@ -165,7 +165,7 @@ public class BaseBean
      * Translate
      * @since 0.9.13 moved from subclasses
      */
-    protected static String _(String s) {
+    protected static String _t(String s) {
         return Messages.getString(s);
     }
 
@@ -173,7 +173,7 @@ public class BaseBean
      * Translate
      * @since 0.9.13 moved from subclasses
      */
-    protected static String _(String s, Object o) {
+    protected static String _t(String s, Object o) {
         return Messages.getString(s, o);
     }
 
@@ -181,7 +181,7 @@ public class BaseBean
      * Translate
      * @since 0.9.13 moved from subclasses
      */
-    protected static String _(String s, Object o, Object o2) {
+    protected static String _t(String s, Object o, Object o2) {
         return Messages.getString(s, o, o2);
     }
 
diff --git a/apps/susidns/src/java/src/i2p/susi/dns/ConfigBean.java b/apps/susidns/src/java/src/i2p/susi/dns/ConfigBean.java
index 57f8fefe55..d5f3e0955a 100644
--- a/apps/susidns/src/java/src/i2p/susi/dns/ConfigBean.java
+++ b/apps/susidns/src/java/src/i2p/susi/dns/ConfigBean.java
@@ -96,18 +96,18 @@ public class ConfigBean extends BaseBean implements Serializable {
 		if( action != null ) {
                         if (I2PAppContext.getGlobalContext().getBooleanProperty(BaseBean.PROP_PW_ENABLE) ||
 			    (serial != null && serial.equals(lastSerial))) {
-				if(action.equals(_("Save"))) {
+				if(action.equals(_t("Save"))) {
 					save();
-					message = _("Configuration saved.");
-				} else if (action.equals(_("Reload"))) {
+					message = _t("Configuration saved.");
+				} else if (action.equals(_t("Reload"))) {
 					reload();
-					message = _("Configuration reloaded.");
+					message = _t("Configuration reloaded.");
 				}
 			}			
 			else {
-				message = _("Invalid form submission, probably because you used the \"back\" or \"reload\" button on your browser. Please resubmit.")
+				message = _t("Invalid form submission, probably because you used the \"back\" or \"reload\" button on your browser. Please resubmit.")
                                           + ' ' +
-                                          _("If the problem persists, verify that you have cookies enabled in your browser.");
+                                          _t("If the problem persists, verify that you have cookies enabled in your browser.");
 			}
 		}
 		if( message.length() > 0 )
diff --git a/apps/susidns/src/java/src/i2p/susi/dns/Messages.java b/apps/susidns/src/java/src/i2p/susi/dns/Messages.java
index 99aa07c0f5..940a341f8c 100644
--- a/apps/susidns/src/java/src/i2p/susi/dns/Messages.java
+++ b/apps/susidns/src/java/src/i2p/susi/dns/Messages.java
@@ -16,12 +16,12 @@ public class Messages {
     }
 
     /** lang in routerconsole.lang property, else current locale */
-    public String _(String key) {
+    public String _t(String key) {
         return Translate.getString(key, _context, BUNDLE_NAME);
     }
 
     /** @since 0.9.11 */
-    public String _(String key, Object o) {
+    public String _t(String key, Object o) {
         return Translate.getString(key, o, _context, BUNDLE_NAME);
     }
 
diff --git a/apps/susidns/src/java/src/i2p/susi/dns/NamingServiceBean.java b/apps/susidns/src/java/src/i2p/susi/dns/NamingServiceBean.java
index 2faefb8531..14eaebbd73 100644
--- a/apps/susidns/src/java/src/i2p/susi/dns/NamingServiceBean.java
+++ b/apps/susidns/src/java/src/i2p/susi/dns/NamingServiceBean.java
@@ -101,7 +101,7 @@ public class NamingServiceBean extends AddressbookBean
 		if (isDirect())
 			return super.getDisplayName();
 		loadConfig();
-		return _("{0} address book in {1} database", getFileName(), getNamingService().getName());
+		return _t("{0} address book in {1} database", getFileName(), getNamingService().getName());
 	}
 
 	/** depth-first search */
@@ -229,7 +229,7 @@ public class NamingServiceBean extends AddressbookBean
                         if (_context.getBooleanProperty(PROP_PW_ENABLE) ||
 			    (serial != null && serial.equals(lastSerial))) {
 				boolean changed = false;
-				if (action.equals(_("Add")) || action.equals(_("Replace"))) {
+				if (action.equals(_t("Add")) || action.equals(_t("Replace"))) {
 					if(hostname != null && destination != null) {
 						try {
 							// throws IAE with translated message
@@ -240,9 +240,9 @@ public class NamingServiceBean extends AddressbookBean
 							Properties outProperties= new Properties();
 							Destination oldDest = getNamingService().lookup(host, nsOptions, outProperties);
 							if (oldDest != null && destination.equals(oldDest.toBase64())) {
-								message = _("Host name {0} is already in address book, unchanged.", displayHost);
-							} else if (oldDest != null && !action.equals(_("Replace"))) {
-								message = _("Host name {0} is already in address book with a different destination. Click \"Replace\" to overwrite.", displayHost);
+								message = _t("Host name {0} is already in address book, unchanged.", displayHost);
+							} else if (oldDest != null && !action.equals(_t("Replace"))) {
+								message = _t("Host name {0} is already in address book with a different destination. Click \"Replace\" to overwrite.", displayHost);
 							} else {
 								try {
 									Destination dest = new Destination(destination);
@@ -250,37 +250,37 @@ public class NamingServiceBean extends AddressbookBean
 										nsOptions.putAll(outProperties);
 							                        nsOptions.setProperty("m", Long.toString(_context.clock().now()));
 									}
-						                        nsOptions.setProperty("s", _("Manually added via SusiDNS"));
+						                        nsOptions.setProperty("s", _t("Manually added via SusiDNS"));
 									boolean success = getNamingService().put(host, dest, nsOptions);
 									if (success) {
 										changed = true;
 										if (oldDest == null)
-											message = _("Destination added for {0}.", displayHost);
+											message = _t("Destination added for {0}.", displayHost);
 										else
-											message = _("Destination changed for {0}.", displayHost);
+											message = _t("Destination changed for {0}.", displayHost);
 										if (!host.endsWith(".i2p"))
-											message += "<br>" + _("Warning - host name does not end with \".i2p\"");
+											message += "<br>" + _t("Warning - host name does not end with \".i2p\"");
 										// clear form
 										hostname = null;
 										destination = null;
 									} else {
-										message = _("Failed to add Destination for {0} to naming service {1}", displayHost, getNamingService().getName()) + "<br>";
+										message = _t("Failed to add Destination for {0} to naming service {1}", displayHost, getNamingService().getName()) + "<br>";
 									}
 								} catch (DataFormatException dfe) {
-									message = _("Invalid Base 64 destination.");
+									message = _t("Invalid Base 64 destination.");
 								}
 							}
 						} catch (IllegalArgumentException iae) {
 							message = iae.getMessage();
 							if (message == null)
-								message = _("Invalid host name \"{0}\".", hostname);
+								message = _t("Invalid host name \"{0}\".", hostname);
 						}
 					} else {
-						message = _("Please enter a host name and destination");
+						message = _t("Please enter a host name and destination");
 					}
 					// clear search when adding
 					search = null;
-				} else if (action.equals(_("Delete Selected")) || action.equals(_("Delete Entry"))) {
+				} else if (action.equals(_t("Delete Selected")) || action.equals(_t("Delete Entry"))) {
 					String name = null;
 					int deleted = 0;
 					for (String n : deletionMarks) {
@@ -288,7 +288,7 @@ public class NamingServiceBean extends AddressbookBean
 						String uni = AddressBean.toUnicode(n);
 						String displayHost = uni.equals(n) ? n :  uni + " (" + n + ')';
 						if (!success) {
-							message += _("Failed to delete Destination for {0} from naming service {1}", displayHost, getNamingService().getName()) + "<br>";
+							message += _t("Failed to delete Destination for {0} from naming service {1}", displayHost, getNamingService().getName()) + "<br>";
 						} else if (deleted++ == 0) {
 							changed = true;
 							name = displayHost;
@@ -297,25 +297,25 @@ public class NamingServiceBean extends AddressbookBean
 					if( changed ) {
 						if (deleted == 1)
 							// parameter is a host name
-							message += _("Destination {0} deleted.", name);
+							message += _t("Destination {0} deleted.", name);
 						else
 							// parameter will always be >= 2
 							message = ngettext("1 destination deleted.", "{0} destinations deleted.", deleted);
 					} else {
-						message = _("No entries selected to delete.");
+						message = _t("No entries selected to delete.");
 					}
 					// clear search when deleting
-					if (action.equals(_("Delete Entry")))
+					if (action.equals(_t("Delete Entry")))
 						search = null;
 				}
 				if( changed ) {
-					message += "<br>" + _("Address book saved.");
+					message += "<br>" + _t("Address book saved.");
 				}
 			}			
 			else {
-				message = _("Invalid form submission, probably because you used the \"back\" or \"reload\" button on your browser. Please resubmit.")
+				message = _t("Invalid form submission, probably because you used the \"back\" or \"reload\" button on your browser. Please resubmit.")
                                           + ' ' +
-                                          _("If the problem persists, verify that you have cookies enabled in your browser.");
+                                          _t("If the problem persists, verify that you have cookies enabled in your browser.");
 			}
 		}
 		
diff --git a/apps/susidns/src/java/src/i2p/susi/dns/SubscriptionsBean.java b/apps/susidns/src/java/src/i2p/susi/dns/SubscriptionsBean.java
index aae4d50a35..c1043260f2 100644
--- a/apps/susidns/src/java/src/i2p/susi/dns/SubscriptionsBean.java
+++ b/apps/susidns/src/java/src/i2p/susi/dns/SubscriptionsBean.java
@@ -128,7 +128,7 @@ public class SubscriptionsBean extends BaseBean
 		if( action != null ) {
                         if (_context.getBooleanProperty(PROP_PW_ENABLE) ||
 			    (serial != null && serial.equals(lastSerial))) {
-				if (action.equals(_("Save"))) {
+				if (action.equals(_t("Save"))) {
 					save();
 				/*******
 					String nonce = System.getProperty("addressbook.nonce");
@@ -141,22 +141,22 @@ public class SubscriptionsBean extends BaseBean
 				*******/
 					if (content != null && content.length() > 2 &&
 					    _context.portMapper().getPort(PortMapper.SVC_HTTP_PROXY) > 0) {
-						message = _("Subscriptions saved, updating addressbook from subscription sources now.");
+						message = _t("Subscriptions saved, updating addressbook from subscription sources now.");
 						          // + "<img height=\"1\" width=\"1\" alt=\"\" " +
 						          // "src=\"/addressbook/?wakeup=1&nonce=" + nonce + "\">";
 						_context.namingService().requestUpdate(null);
 					} else {
-						message = _("Subscriptions saved.");
+						message = _t("Subscriptions saved.");
 					}
-				} else if (action.equals(_("Reload"))) {
+				} else if (action.equals(_t("Reload"))) {
 					reloadSubs();
-					message = _("Subscriptions reloaded.");
+					message = _t("Subscriptions reloaded.");
 				}
 			}			
 			else {
-				message = _("Invalid form submission, probably because you used the \"back\" or \"reload\" button on your browser. Please resubmit.")
+				message = _t("Invalid form submission, probably because you used the \"back\" or \"reload\" button on your browser. Please resubmit.")
                                           + ' ' +
-                                          _("If the problem persists, verify that you have cookies enabled in your browser.");
+                                          _t("If the problem persists, verify that you have cookies enabled in your browser.");
 			}
 		}
 		if( message.length() > 0 )
diff --git a/apps/susidns/src/jsp/addressbook.jsp b/apps/susidns/src/jsp/addressbook.jsp
index 806504b516..60ee04d670 100644
--- a/apps/susidns/src/jsp/addressbook.jsp
+++ b/apps/susidns/src/jsp/addressbook.jsp
@@ -48,31 +48,31 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>${book.book} <%=intl._("address book")%> - susidns</title>
+<title>${book.book} <%=intl._t("address book")%> - susidns</title>
 <link rel="stylesheet" type="text/css" href="<%=book.getTheme()%>susidns.css">
 </head>
 <body>
 <div class="page">
 <div id="logo">
-<a href="index"><img src="<%=book.getTheme()%>images/logo.png" alt="" title="<%=intl._("Overview")%>" border="0"/></a>
+<a href="index"><img src="<%=book.getTheme()%>images/logo.png" alt="" title="<%=intl._t("Overview")%>" border="0"/></a>
 </div>
 <hr>
 <div id="navi">
 <p>
-<%=intl._("Address books")%>:
-<a href="addressbook?book=private&amp;filter=none&amp;begin=0&amp;end=49"><%=intl._("private")%></a> |
-<a href="addressbook?book=master&amp;filter=none&amp;begin=0&amp;end=49"><%=intl._("master")%></a> |
-<a href="addressbook?book=router&amp;filter=none&amp;begin=0&amp;end=49"><%=intl._("router")%></a> |
-<a href="addressbook?book=published&amp;filter=none&amp;begin=0&amp;end=49"><%=intl._("published")%></a> *
-<a href="subscriptions"><%=intl._("Subscriptions")%></a> *
-<a href="config"><%=intl._("Configuration")%></a> *
-<a href="index"><%=intl._("Overview")%></a>
+<%=intl._t("Address books")%>:
+<a href="addressbook?book=private&amp;filter=none&amp;begin=0&amp;end=49"><%=intl._t("private")%></a> |
+<a href="addressbook?book=master&amp;filter=none&amp;begin=0&amp;end=49"><%=intl._t("master")%></a> |
+<a href="addressbook?book=router&amp;filter=none&amp;begin=0&amp;end=49"><%=intl._t("router")%></a> |
+<a href="addressbook?book=published&amp;filter=none&amp;begin=0&amp;end=49"><%=intl._t("published")%></a> *
+<a href="subscriptions"><%=intl._t("Subscriptions")%></a> *
+<a href="config"><%=intl._t("Configuration")%></a> *
+<a href="index"><%=intl._t("Overview")%></a>
 </p>
 </div>
 <hr>
 <div id="headline">
-<h3><%=intl._("Address book")%>: <%=intl._(book.getBook())%></h3>
-<h4><%=intl._("Storage")%>: ${book.displayName}</h4>
+<h3><%=intl._t("Address book")%>: <%=intl._t(book.getBook())%></h3>
+<h4><%=intl._t("Storage")%>: ${book.displayName}</h4>
 </div>
 
 <div id="messages">${book.messages}</div>
@@ -81,7 +81,7 @@ ${book.loadBookMessages}
 
 <c:if test="${book.notEmpty}">
 <div id="filter">
-<p><%=intl._("Filter")%>:
+<p><%=intl._t("Filter")%>:
 <a href="addressbook?filter=a&amp;begin=0&amp;end=49">a</a>
 <a href="addressbook?filter=b&amp;begin=0&amp;end=49">b</a>
 <a href="addressbook?filter=c&amp;begin=0&amp;end=49">c</a> 
@@ -109,11 +109,11 @@ ${book.loadBookMessages}
 <a href="addressbook?filter=y&amp;begin=0&amp;end=49">y</a>
 <a href="addressbook?filter=z&amp;begin=0&amp;end=49">z</a>
 <a href="addressbook?filter=0-9&amp;begin=0&amp;end=49">0-9</a>
-<a href="addressbook?filter=xn--&amp;begin=0&amp;end=49"><%=intl._("other")%></a>
-<a href="addressbook?filter=none&amp;begin=0&amp;end=49"><%=intl._("all")%></a></p>
+<a href="addressbook?filter=xn--&amp;begin=0&amp;end=49"><%=intl._t("other")%></a>
+<a href="addressbook?filter=none&amp;begin=0&amp;end=49"><%=intl._t("all")%></a></p>
 <c:if test="${book.hasFilter}">
-<p><%=intl._("Current filter")%>: ${book.filter}
-(<a href="addressbook?filter=none&amp;begin=0&amp;end=49"><%=intl._("clear filter")%></a>)</p>
+<p><%=intl._t("Current filter")%>: ${book.filter}
+(<a href="addressbook?filter=none&amp;begin=0&amp;end=49"><%=intl._t("clear filter")%></a>)</p>
 </c:if>
 </div>
 
@@ -122,8 +122,8 @@ ${book.loadBookMessages}
 <input type="hidden" name="begin" value="0">
 <input type="hidden" name="end" value="49">
 <table><tr>
-<td class="search"><%=intl._("Search")%>: <input class="search" type="text" name="search" value="${book.search}" size="20" ></td>
-<td class="search"><input class="search" type="submit" name="submitsearch" value="<%=intl._("Search")%>" ></td>
+<td class="search"><%=intl._t("Search")%>: <input class="search" type="text" name="search" value="${book.search}" size="20" ></td>
+<td class="search"><input class="search" type="submit" name="submitsearch" value="<%=intl._t("Search")%>" ></td>
 </tr>
 </table>
 </form></div>
@@ -147,21 +147,21 @@ ${book.loadBookMessages}
 <th>&nbsp;</th>
 </c:if>
 
-<th><%=intl._("Name")%></th>
-<th colspan="2"><%=intl._("Links")%></th>
-<th><%=intl._("Destination")%></th>
+<th><%=intl._t("Name")%></th>
+<th colspan="2"><%=intl._t("Links")%></th>
+<th><%=intl._t("Destination")%></th>
 </tr>
 <!-- limit iterator, or "Form too large" may result on submit, and is a huge web page if we don't -->
 <c:forEach items="${book.entries}" var="addr" begin="${book.resultBegin}" end="${book.resultEnd}">
 <tr class="list${book.trClass}">
 <c:if test="${book.master || book.router || book.published || book.private}">
-<td class="checkbox"><input type="checkbox" name="checked" value="${addr.name}" title="<%=intl._("Mark for deletion")%>"></td>
+<td class="checkbox"><input type="checkbox" name="checked" value="${addr.name}" title="<%=intl._t("Mark for deletion")%>"></td>
 </c:if>
 <td class="names"><a href="http://${addr.name}/" target="_top">${addr.displayName}</a>
 </td><td class="names">
-<span class="addrhlpr"><a href="http://${addr.b32}/" target="_top" title="<%=intl._("Base 32 address")%>">b32</a></span>
+<span class="addrhlpr"><a href="http://${addr.b32}/" target="_top" title="<%=intl._t("Base 32 address")%>">b32</a></span>
 </td><td class="names">
-<span class="addrhlpr"><a href="details?h=${addr.name}" title="<%=intl._("More information on this entry")%>"><%=intl._("details")%></a></span>
+<span class="addrhlpr"><a href="details?h=${addr.name}" title="<%=intl._t("More information on this entry")%>"><%=intl._t("details")%></a></span>
 </td>
 <td class="destinations"><textarea rows="1" style="height:3em;" wrap="off" cols="40" readonly="readonly" name="dest_${addr.name}" >${addr.destination}</textarea></td>
 </tr>
@@ -172,8 +172,8 @@ ${book.loadBookMessages}
 <c:if test="${book.master || book.router || book.published || book.private}">
 <div id="buttons">
 <p class="buttons">
-<input class="cancel" type="reset" value="<%=intl._("Cancel")%>" >
-<input class="delete" type="submit" name="action" value="<%=intl._("Delete Selected")%>" >
+<input class="cancel" type="reset" value="<%=intl._t("Cancel")%>" >
+<input class="delete" type="submit" name="action" value="<%=intl._t("Delete Selected")%>" >
 </p>
 </div></form>
 </c:if>
@@ -188,14 +188,14 @@ ${book.loadBookMessages}
 <c:if test="${book.hasFilter}">
 <input type="hidden" name="filter" value="${book.filter}">
 </c:if>
-<input type="submit" class="export" value="<%=intl._("Export in hosts.txt format")%>" />
+<input type="submit" class="export" value="<%=intl._t("Export in hosts.txt format")%>" />
 </p></div></form>
 
 </c:if><% /* book.notEmpty */ %>
 
 <c:if test="${book.isEmpty}">
 <div id="book">
-<p class="book"><%=intl._("This address book is empty.")%></p>
+<p class="book"><%=intl._t("This address book is empty.")%></p>
 </div>
 </c:if>
 
@@ -204,16 +204,16 @@ ${book.loadBookMessages}
 <input type="hidden" name="begin" value="0">
 <input type="hidden" name="end" value="49">
 <div id="add">
-<h3><%=intl._("Add new destination")%>:</h3>
+<h3><%=intl._t("Add new destination")%>:</h3>
 <table><tr><td>
-<b><%=intl._("Host Name")%></b></td><td><input type="text" name="hostname" value="${book.hostname}" size="54">
+<b><%=intl._t("Host Name")%></b></td><td><input type="text" name="hostname" value="${book.hostname}" size="54">
 </td></tr><tr><td>
-<b><%=intl._("Destination")%></b></td><td><textarea name="destination" rows="1" style="height:3em" wrap="off" cols="70" spellcheck="false">${book.destination}</textarea>
+<b><%=intl._t("Destination")%></b></td><td><textarea name="destination" rows="1" style="height:3em" wrap="off" cols="70" spellcheck="false">${book.destination}</textarea>
 </td></tr></table>
 <p class="buttons">
-<input class="cancel" type="reset" value="<%=intl._("Cancel")%>" >
-<input class="accept" type="submit" name="action" value="<%=intl._("Replace")%>" >
-<input class="add" type="submit" name="action" value="<%=intl._("Add")%>" >
+<input class="cancel" type="reset" value="<%=intl._t("Cancel")%>" >
+<input class="accept" type="submit" name="action" value="<%=intl._t("Replace")%>" >
+<input class="add" type="submit" name="action" value="<%=intl._t("Add")%>" >
 </p>
 </div></form>
 
diff --git a/apps/susidns/src/jsp/config.jsp b/apps/susidns/src/jsp/config.jsp
index 6a650d3f5d..27e57a6e90 100644
--- a/apps/susidns/src/jsp/config.jsp
+++ b/apps/susidns/src/jsp/config.jsp
@@ -44,24 +44,24 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title><%=intl._("configuration")%> - susidns</title>
+<title><%=intl._t("configuration")%> - susidns</title>
 <link rel="stylesheet" type="text/css" href="<%=base.getTheme()%>susidns.css">
 </head>
 <body>
 <div class="page">
 <div id="logo">
-<a href="index"><img src="<%=base.getTheme()%>images/logo.png" alt="" title="<%=intl._("Overview")%>" border="0"/></a>
+<a href="index"><img src="<%=base.getTheme()%>images/logo.png" alt="" title="<%=intl._t("Overview")%>" border="0"/></a>
 </div><hr>
 <div id="navi">
 <p>
-<%=intl._("Address books")%>:
-<a href="addressbook?book=private"><%=intl._("private")%></a> |
-<a href="addressbook?book=master"><%=intl._("master")%></a> |
-<a href="addressbook?book=router"><%=intl._("router")%></a> |
-<a href="addressbook?book=published"><%=intl._("published")%></a> *
-<a href="subscriptions"><%=intl._("Subscriptions")%></a> *
-<%=intl._("Configuration")%> *
-<a href="index"><%=intl._("Overview")%></a>
+<%=intl._t("Address books")%>:
+<a href="addressbook?book=private"><%=intl._t("private")%></a> |
+<a href="addressbook?book=master"><%=intl._t("master")%></a> |
+<a href="addressbook?book=router"><%=intl._t("router")%></a> |
+<a href="addressbook?book=published"><%=intl._t("published")%></a> *
+<a href="subscriptions"><%=intl._t("Subscriptions")%></a> *
+<%=intl._t("Configuration")%> *
+<a href="index"><%=intl._t("Overview")%></a>
 </p>
 </div><hr>
 <div id="headline">
@@ -74,65 +74,65 @@
 <textarea name="config" rows="10" cols="80">${cfg.config}</textarea>
 </div>
 <div id="buttons">
-<input class="reload" type="submit" name="action" value="<%=intl._("Reload")%>" >
-<input class="accept" type="submit" name="action" value="<%=intl._("Save")%>" >
+<input class="reload" type="submit" name="action" value="<%=intl._t("Reload")%>" >
+<input class="accept" type="submit" name="action" value="<%=intl._t("Save")%>" >
 </div>
 </form>
 <div id="help">
-<h3><%=intl._("Hints")%></h3>
+<h3><%=intl._t("Hints")%></h3>
 <ol>
 <li>
-<%=intl._("File and directory paths here are relative to the addressbook's working directory, which is normally ~/.i2p/addressbook/ (Linux) or %APPDATA%\\I2P\\addressbook\\ (Windows).")%>
+<%=intl._t("File and directory paths here are relative to the addressbook's working directory, which is normally ~/.i2p/addressbook/ (Linux) or %APPDATA%\\I2P\\addressbook\\ (Windows).")%>
 </li>
 <li>
-<%=intl._("If you want to manually add lines to an addressbook, add them to the private or master addressbooks.")%>
-<%=intl._("The router addressbook and the published addressbook are updated by the addressbook application.")%>
+<%=intl._t("If you want to manually add lines to an addressbook, add them to the private or master addressbooks.")%>
+<%=intl._t("The router addressbook and the published addressbook are updated by the addressbook application.")%>
 </li>
 <li>
-<%=intl._("When you publish your addressbook, ALL destinations from the master and router addressbooks appear there.")%>
-<%=intl._("Use the private addressbook for private destinations, these are not published.")%>
+<%=intl._t("When you publish your addressbook, ALL destinations from the master and router addressbooks appear there.")%>
+<%=intl._t("Use the private addressbook for private destinations, these are not published.")%>
 </li>
 </ol>
-<h3><%=intl._("Options")%></h3>
+<h3><%=intl._t("Options")%></h3>
 <ul>
 <li><b>subscriptions</b> -
-<%=intl._("File containing the list of subscriptions URLs (no need to change)")%>
+<%=intl._t("File containing the list of subscriptions URLs (no need to change)")%>
 </li>
 <li><b>update_delay</b> -
-<%=intl._("Update interval in hours")%>
+<%=intl._t("Update interval in hours")%>
 </li>
 <li><b>published_addressbook</b> -
-<%=intl._("Your public hosts.txt file (choose a path within your webserver document root)")%>
+<%=intl._t("Your public hosts.txt file (choose a path within your webserver document root)")%>
 </li>
 <li><b>router_addressbook</b> -
-<%=intl._("Your hosts.txt (don't change)")%>
+<%=intl._t("Your hosts.txt (don't change)")%>
 </li>
 <li><b>master_addressbook</b> -
-<%=intl._("Your personal addressbook, these hosts will be published")%>
+<%=intl._t("Your personal addressbook, these hosts will be published")%>
 </li>
 <li><b>private_addressbook</b> -
-<%=intl._("Your private addressbook, it is never published")%>
+<%=intl._t("Your private addressbook, it is never published")%>
 </li>
 <li><b>proxy_port</b> -
-<%=intl._("Port for your eepProxy (no need to change)")%>
+<%=intl._t("Port for your eepProxy (no need to change)")%>
 </li>
 <li><b>proxy_host</b> -
-<%=intl._("Hostname for your eepProxy (no need to change)")%>
+<%=intl._t("Hostname for your eepProxy (no need to change)")%>
 </li>
 <li><b>should_publish</b> -
-<%=intl._("Whether to update the published addressbook")%>
+<%=intl._t("Whether to update the published addressbook")%>
 </li>
 <li><b>etags</b> -
-<%=intl._("File containing the etags header from the fetched subscription URLs (no need to change)")%>
+<%=intl._t("File containing the etags header from the fetched subscription URLs (no need to change)")%>
 </li>
 <li><b>last_modified</b> -
-<%=intl._("File containing the modification timestamp for each fetched subscription URL (no need to change)")%>
+<%=intl._t("File containing the modification timestamp for each fetched subscription URL (no need to change)")%>
 </li>
 <li><b>log</b> -
-<%=intl._("File to log activity to (change to /dev/null if you like)")%>
+<%=intl._t("File to log activity to (change to /dev/null if you like)")%>
 </li>
 <li><b>theme</b> -
-<%=intl._("Name of the theme to use (defaults to 'light')")%>
+<%=intl._t("Name of the theme to use (defaults to 'light')")%>
 </li>
 </ul>
 </div>
diff --git a/apps/susidns/src/jsp/details.jsp b/apps/susidns/src/jsp/details.jsp
index 9334e43ca7..a5660b6773 100644
--- a/apps/susidns/src/jsp/details.jsp
+++ b/apps/susidns/src/jsp/details.jsp
@@ -42,31 +42,31 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>${book.book} <%=intl._("addressbook")%> - susidns</title>
+<title>${book.book} <%=intl._t("addressbook")%> - susidns</title>
 <link rel="stylesheet" type="text/css" href="<%=book.getTheme()%>susidns.css">
 </head>
 <body>
 <div class="page">
 <div id="logo">
-<a href="index"><img src="<%=book.getTheme()%>images/logo.png" alt="" title="<%=intl._("Overview")%>" border="0"/></a>
+<a href="index"><img src="<%=book.getTheme()%>images/logo.png" alt="" title="<%=intl._t("Overview")%>" border="0"/></a>
 </div>
 <hr>
 <div id="navi">
 <p>
-<%=intl._("Address books")%>:
-<a href="addressbook?book=private&amp;filter=none&amp;begin=0&amp;end=49"><%=intl._("private")%></a> |
-<a href="addressbook?book=master&amp;filter=none&amp;begin=0&amp;end=49"><%=intl._("master")%></a> |
-<a href="addressbook?book=router&amp;filter=none&amp;begin=0&amp;end=49"><%=intl._("router")%></a> |
-<a href="addressbook?book=published&amp;filter=none&amp;begin=0&amp;end=49"><%=intl._("published")%></a> *
-<a href="subscriptions"><%=intl._("Subscriptions")%></a> *
-<a href="config"><%=intl._("Configuration")%></a> *
-<a href="index"><%=intl._("Overview")%></a>
+<%=intl._t("Address books")%>:
+<a href="addressbook?book=private&amp;filter=none&amp;begin=0&amp;end=49"><%=intl._t("private")%></a> |
+<a href="addressbook?book=master&amp;filter=none&amp;begin=0&amp;end=49"><%=intl._t("master")%></a> |
+<a href="addressbook?book=router&amp;filter=none&amp;begin=0&amp;end=49"><%=intl._t("router")%></a> |
+<a href="addressbook?book=published&amp;filter=none&amp;begin=0&amp;end=49"><%=intl._t("published")%></a> *
+<a href="subscriptions"><%=intl._t("Subscriptions")%></a> *
+<a href="config"><%=intl._t("Configuration")%></a> *
+<a href="index"><%=intl._t("Overview")%></a>
 </p>
 </div>
 <hr>
 <div id="headline">
-<h3><%=intl._("Address book")%>: <%=intl._(book.getBook())%></h3>
-<h4><%=intl._("Storage")%>: ${book.displayName}</h4>
+<h3><%=intl._t("Address book")%>: <%=intl._t(book.getBook())%></h3>
+<h4><%=intl._t("Storage")%>: ${book.displayName}</h4>
 </div>
 
 <div id="book">
@@ -85,49 +85,49 @@
 <jsp:setProperty name="book" property="trClass"	value="0" />
 <table class="book" cellspacing="0" cellpadding="5">
 <tr class="list${book.trClass}">
-<td><%=intl._("Host Name")%></td>
+<td><%=intl._t("Host Name")%></td>
 <td><a href="http://<%=addr.getName()%>/" target="_top"><%=addr.getDisplayName()%></a></td>
 </tr><tr class="list${book.trClass}">
 <%
     if (addr.isIDN()) {
 %>
-<td><%=intl._("Encoded Name")%></td>
+<td><%=intl._t("Encoded Name")%></td>
 <td><a href="http://<%=addr.getName()%>/" target="_top"><%=addr.getName()%></a></td>
 </tr><tr class="list${book.trClass}">
 <%
     }
 %>
-<td><%=intl._("Base 32 Address")%></td>
+<td><%=intl._t("Base 32 Address")%></td>
 <td><a href="http://<%=b32%>/" target="_top"><%=b32%></a></td>
 </tr><tr class="list${book.trClass}">
-<td><%=intl._("Base 64 Hash")%></td>
+<td><%=intl._t("Base 64 Hash")%></td>
 <td><%=addr.getB64()%></td>
 </tr><tr class="list${book.trClass}">
-<td><%=intl._("Address Helper")%></td>
-<td><a href="http://<%=addr.getName()%>/?i2paddresshelper=<%=addr.getDestination()%>" target="_top"><%=intl._("link")%></a></td>
+<td><%=intl._t("Address Helper")%></td>
+<td><a href="http://<%=addr.getName()%>/?i2paddresshelper=<%=addr.getDestination()%>" target="_top"><%=intl._t("link")%></a></td>
 </tr><tr class="list${book.trClass}">
-<td><%=intl._("Public Key")%></td>
-<td><%=intl._("ElGamal 2048 bit")%></td>
+<td><%=intl._t("Public Key")%></td>
+<td><%=intl._t("ElGamal 2048 bit")%></td>
 </tr><tr class="list${book.trClass}">
-<td><%=intl._("Signing Key")%></td>
+<td><%=intl._t("Signing Key")%></td>
 <td><%=addr.getSigType()%></td>
 </tr><tr class="list${book.trClass}">
-<td><%=intl._("Certificate")%></td>
+<td><%=intl._t("Certificate")%></td>
 <td><%=addr.getCert()%></td>
 </tr><tr class="list${book.trClass}">
-<td><%=intl._("Added Date")%></td>
+<td><%=intl._t("Added Date")%></td>
 <td><%=addr.getAdded()%></td>
 </tr><tr class="list${book.trClass}">
-<td><%=intl._("Source")%></td>
+<td><%=intl._t("Source")%></td>
 <td><%=addr.getSource()%></td>
 </tr><tr class="list${book.trClass}">
-<td><%=intl._("Last Modified")%></td>
+<td><%=intl._t("Last Modified")%></td>
 <td><%=addr.getModded()%></td>
 </tr><tr class="list${book.trClass}">
-<td><%=intl._("Notes")%></td>
+<td><%=intl._t("Notes")%></td>
 <td><%=addr.getNotes()%></td>
 </tr><tr class="list${book.trClass}">
-<td><%=intl._("Destination")%></td>
+<td><%=intl._t("Destination")%></td>
 <td class="destinations"><textarea rows="1" style="height:3em;" wrap="off" cols="70" readonly="readonly" ><%=addr.getDestination()%></textarea></td>
 </tr></table>
 </div>
@@ -138,7 +138,7 @@
 <input type="hidden" name="begin" value="0">
 <input type="hidden" name="end" value="49">
 <input type="hidden" name="checked" value="<%=detail%>">
-<input class="delete" type="submit" name="action" value="<%=intl._("Delete Entry")%>" >
+<input class="delete" type="submit" name="action" value="<%=intl._t("Delete Entry")%>" >
 </p>
 </form>
 </div>
diff --git a/apps/susidns/src/jsp/index.jsp b/apps/susidns/src/jsp/index.jsp
index 505beeec7f..67c96c6801 100644
--- a/apps/susidns/src/jsp/index.jsp
+++ b/apps/susidns/src/jsp/index.jsp
@@ -42,7 +42,7 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title><%=intl._("Introduction")%> - SusiDNS</title>
+<title><%=intl._t("Introduction")%> - SusiDNS</title>
 <link rel="stylesheet" type="text/css" href="<%=base.getTheme()%>susidns.css">
 </head>
 <body>
@@ -53,39 +53,39 @@
 <hr>
 <div id="navi">
 <p>
-<%=intl._("Address books")%>:
-<a href="addressbook?book=private"><%=intl._("private")%></a> |
-<a href="addressbook?book=master"><%=intl._("master")%></a> |
-<a href="addressbook?book=router"><%=intl._("router")%></a> |
-<a href="addressbook?book=published"><%=intl._("published")%></a> *
-<a href="subscriptions"><%=intl._("Subscriptions")%></a> *
-<a href="config"><%=intl._("Configuration")%></a> *
-<%=intl._("Overview")%>
+<%=intl._t("Address books")%>:
+<a href="addressbook?book=private"><%=intl._t("private")%></a> |
+<a href="addressbook?book=master"><%=intl._t("master")%></a> |
+<a href="addressbook?book=router"><%=intl._t("router")%></a> |
+<a href="addressbook?book=published"><%=intl._t("published")%></a> *
+<a href="subscriptions"><%=intl._t("Subscriptions")%></a> *
+<a href="config"><%=intl._t("Configuration")%></a> *
+<%=intl._t("Overview")%>
 </p>
 </div>
 <hr>
 <div id="content">
-<h3><%=intl._("What is the addressbook?")%></h3>
+<h3><%=intl._t("What is the addressbook?")%></h3>
 <p>
-<%=intl._("The addressbook application is part of your I2P installation.")%>
-<%=intl._("It regularly updates your hosts.txt file from distributed sources or \"subscriptions\".")%>
+<%=intl._t("The addressbook application is part of your I2P installation.")%>
+<%=intl._t("It regularly updates your hosts.txt file from distributed sources or \"subscriptions\".")%>
 </p>
 <p>
-<%=intl._("In the default configuration, the address book is only subscribed to {0}.", "i2p-projekt.i2p")%>
-<%=intl._("Subscribing to additional sites is easy, just add them to your <a href=\"subscriptions\">subscriptions</a> file.")%>
+<%=intl._t("In the default configuration, the address book is only subscribed to {0}.", "i2p-projekt.i2p")%>
+<%=intl._t("Subscribing to additional sites is easy, just add them to your <a href=\"subscriptions\">subscriptions</a> file.")%>
 </p>
 <p>
-<%=intl._("For more information on naming in I2P, see <a href=\"http://i2p-projekt.i2p/naming.html\" target=\"_top\">the overview</a>.")%>
+<%=intl._t("For more information on naming in I2P, see <a href=\"http://i2p-projekt.i2p/naming.html\" target=\"_top\">the overview</a>.")%>
 </p>
-<h3><%=intl._("How does the addressbook application work?")%></h3>
+<h3><%=intl._t("How does the addressbook application work?")%></h3>
 <p>
-<%=intl._("The addressbook application regularly polls your subscriptions and merges their content into your \"router\" address book.")%>
-<%=intl._("Then it merges your \"master\" address book into the router address book as well.")%>
-<%=intl._("If configured, the router address book is now written to the \"published\" address book, which will be publicly available if you are running an eepsite.")%>
+<%=intl._t("The addressbook application regularly polls your subscriptions and merges their content into your \"router\" address book.")%>
+<%=intl._t("Then it merges your \"master\" address book into the router address book as well.")%>
+<%=intl._t("If configured, the router address book is now written to the \"published\" address book, which will be publicly available if you are running an eepsite.")%>
 </p><p>
-<%=intl._("The router also uses a private address book (not shown in the picture), which is not merged or published.")%>
-<%=intl._("Hosts in the private address book can be accessed by you but their addresses are never distributed to others.")%>
-<%=intl._("The private address book can also be used for aliases of hosts in your other address books.")%>
+<%=intl._t("The router also uses a private address book (not shown in the picture), which is not merged or published.")%>
+<%=intl._t("Hosts in the private address book can be accessed by you but their addresses are never distributed to others.")%>
+<%=intl._t("The private address book can also be used for aliases of hosts in your other address books.")%>
 </p>
 <center><img src="/themes/susidns/images/how.png" border="0" alt="address book working scheme" title="How the address book works" class="illustrate" /></center>
 </div>
diff --git a/apps/susidns/src/jsp/subscriptions.jsp b/apps/susidns/src/jsp/subscriptions.jsp
index db588c6a8d..25ec212612 100644
--- a/apps/susidns/src/jsp/subscriptions.jsp
+++ b/apps/susidns/src/jsp/subscriptions.jsp
@@ -43,24 +43,24 @@
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title><%=intl._("subscriptions")%> - susidns</title>
+<title><%=intl._t("subscriptions")%> - susidns</title>
 <link rel="stylesheet" type="text/css" href="<%=subs.getTheme()%>susidns.css">
 </head>
 <body>
 <div class="page">
 <div id="logo">
-<a href="index"><img src="<%=subs.getTheme()%>images/logo.png" alt="" title="<%=intl._("Overview")%>" border="0"/></a>
+<a href="index"><img src="<%=subs.getTheme()%>images/logo.png" alt="" title="<%=intl._t("Overview")%>" border="0"/></a>
 </div><hr>
 <div id="navi">
 <p>
-<%=intl._("Address books")%>:
-<a href="addressbook?book=private"><%=intl._("private")%></a> |
-<a href="addressbook?book=master"><%=intl._("master")%></a> |
-<a href="addressbook?book=router"><%=intl._("router")%></a> |
-<a href="addressbook?book=published"><%=intl._("published")%></a> *
-<%=intl._("Subscriptions")%> *
-<a href="config"><%=intl._("Configuration")%></a> *
-<a href="index"><%=intl._("Overview")%></a>
+<%=intl._t("Address books")%>:
+<a href="addressbook?book=private"><%=intl._t("private")%></a> |
+<a href="addressbook?book=master"><%=intl._t("master")%></a> |
+<a href="addressbook?book=router"><%=intl._t("router")%></a> |
+<a href="addressbook?book=published"><%=intl._t("published")%></a> *
+<%=intl._t("Subscriptions")%> *
+<a href="config"><%=intl._t("Configuration")%></a> *
+<a href="index"><%=intl._t("Overview")%></a>
 </p>
 </div><hr>
 <div id="headline">
@@ -73,18 +73,18 @@
 <textarea name="content" rows="10" cols="80">${subs.content}</textarea>
 </div>
 <div id="buttons">
-<input class="reload" type="submit" name="action" value="<%=intl._("Reload")%>" >
-<input class="accept" type="submit" name="action" value="<%=intl._("Save")%>" >
+<input class="reload" type="submit" name="action" value="<%=intl._t("Reload")%>" >
+<input class="accept" type="submit" name="action" value="<%=intl._t("Save")%>" >
 </div>
 </form>
 <div id="help">
 <p class="help">
-<%=intl._("The subscription file contains a list of i2p URLs.")%>
-<%=intl._("The addressbook application regularly checks this list for new eepsites.")%>
-<%=intl._("Those URLs refer to published hosts.txt files.")%>
-<%=intl._("The default subscription is the hosts.txt from {0}, which is updated infrequently.", "i2p-projekt.i2p")%>
-<%=intl._("So it is a good idea to add additional subscriptions to sites that have the latest addresses.")%>
-<a href="http://i2p-projekt.i2p/faq.html#subscriptions" target="_top"><%=intl._("See the FAQ for a list of subscription URLs.")%></a>
+<%=intl._t("The subscription file contains a list of i2p URLs.")%>
+<%=intl._t("The addressbook application regularly checks this list for new eepsites.")%>
+<%=intl._t("Those URLs refer to published hosts.txt files.")%>
+<%=intl._t("The default subscription is the hosts.txt from {0}, which is updated infrequently.", "i2p-projekt.i2p")%>
+<%=intl._t("So it is a good idea to add additional subscriptions to sites that have the latest addresses.")%>
+<a href="http://i2p-projekt.i2p/faq.html#subscriptions" target="_top"><%=intl._t("See the FAQ for a list of subscription URLs.")%></a>
 </p>
 </div>
 <div id="footer">
diff --git a/apps/susimail/bundle-messages.sh b/apps/susimail/bundle-messages.sh
index 115aafe724..82945802a9 100644
--- a/apps/susimail/bundle-messages.sh
+++ b/apps/susimail/bundle-messages.sh
@@ -63,13 +63,13 @@ do
         echo "Updating the $i file from the tags..."
 		# extract strings from java and jsp files, and update messages.po files
 		# translate calls must be one of the forms:
-		# _("foo")
+		# _t("foo")
 		# _x("foo")
 		# To start a new translation, copy the header from an old translation to the new .po file,
 		# then ant distclean poupdate.
 		find $JPATHS -name *.java > $TMPFILE
 		xgettext -f $TMPFILE -F -L java --from-code=UTF-8 --add-comments\
-	                 --keyword=_ --keyword=_x \
+	                 --keyword=_t --keyword=_x \
 		         -o ${i}t
 		if [ $? -ne 0 ]
 		then
diff --git a/apps/susimail/locale/messages_cs.po b/apps/susimail/locale/messages_cs.po
index a7b3c6b21d..8740bb96de 100644
--- a/apps/susimail/locale/messages_cs.po
+++ b/apps/susimail/locale/messages_cs.po
@@ -352,16 +352,16 @@ msgstr "Nová"
 
 #. In theory, these are valid and will apply to the first checked message,
 #. but that's not obvious and did it work?
-#. button( REPLY, _("Reply") ) +
-#. button( REPLYALL, _("Reply All") ) +
-#. button( FORWARD, _("Forward") ) + spacer +
-#. button( DELETE, _("Delete") ) + spacer +
+#. button( REPLY, _t("Reply") ) +
+#. button( REPLYALL, _t("Reply All") ) +
+#. button( FORWARD, _t("Forward") ) + spacer +
+#. button( DELETE, _t("Delete") ) + spacer +
 #: src/src/i2p/susi/webmail/WebMail.java:2186
 msgid "Check Mail"
 msgstr "Zkontrolovat mail"
 
 #. if (Config.hasConfigFile())
-#. out.println(button( RELOAD, _("Reload Config") ) + spacer);
+#. out.println(button( RELOAD, _t("Reload Config") ) + spacer);
 #: src/src/i2p/susi/webmail/WebMail.java:2189
 msgid "Logout"
 msgstr "Odhlásit"
diff --git a/apps/susimail/locale/messages_da.po b/apps/susimail/locale/messages_da.po
index efec2fa73a..fce02a2899 100644
--- a/apps/susimail/locale/messages_da.po
+++ b/apps/susimail/locale/messages_da.po
@@ -349,16 +349,16 @@ msgstr ""
 
 #. In theory, these are valid and will apply to the first checked message,
 #. but that's not obvious and did it work?
-#. button( REPLY, _("Reply") ) +
-#. button( REPLYALL, _("Reply All") ) +
-#. button( FORWARD, _("Forward") ) + spacer +
-#. button( DELETE, _("Delete") ) + spacer +
+#. button( REPLY, _t("Reply") ) +
+#. button( REPLYALL, _t("Reply All") ) +
+#. button( FORWARD, _t("Forward") ) + spacer +
+#. button( DELETE, _t("Delete") ) + spacer +
 #: src/src/i2p/susi/webmail/WebMail.java:2186
 msgid "Check Mail"
 msgstr ""
 
 #. if (Config.hasConfigFile())
-#. out.println(button( RELOAD, _("Reload Config") ) + spacer);
+#. out.println(button( RELOAD, _t("Reload Config") ) + spacer);
 #: src/src/i2p/susi/webmail/WebMail.java:2189
 msgid "Logout"
 msgstr ""
diff --git a/apps/susimail/locale/messages_de.po b/apps/susimail/locale/messages_de.po
index 461230f000..28062f9320 100644
--- a/apps/susimail/locale/messages_de.po
+++ b/apps/susimail/locale/messages_de.po
@@ -356,16 +356,16 @@ msgstr "Verfassen"
 
 #. In theory, these are valid and will apply to the first checked message,
 #. but that's not obvious and did it work?
-#. button( REPLY, _("Reply") ) +
-#. button( REPLYALL, _("Reply All") ) +
-#. button( FORWARD, _("Forward") ) + spacer +
-#. button( DELETE, _("Delete") ) + spacer +
+#. button( REPLY, _t("Reply") ) +
+#. button( REPLYALL, _t("Reply All") ) +
+#. button( FORWARD, _t("Forward") ) + spacer +
+#. button( DELETE, _t("Delete") ) + spacer +
 #: src/src/i2p/susi/webmail/WebMail.java:2186
 msgid "Check Mail"
 msgstr "Nachrichten abrufen"
 
 #. if (Config.hasConfigFile())
-#. out.println(button( RELOAD, _("Reload Config") ) + spacer);
+#. out.println(button( RELOAD, _t("Reload Config") ) + spacer);
 #: src/src/i2p/susi/webmail/WebMail.java:2189
 msgid "Logout"
 msgstr "Abmelden"
diff --git a/apps/susimail/locale/messages_en.po b/apps/susimail/locale/messages_en.po
index 022acdd908..052b9c554e 100644
--- a/apps/susimail/locale/messages_en.po
+++ b/apps/susimail/locale/messages_en.po
@@ -346,16 +346,16 @@ msgstr ""
 
 #. In theory, these are valid and will apply to the first checked message,
 #. but that's not obvious and did it work?
-#. button( REPLY, _("Reply") ) +
-#. button( REPLYALL, _("Reply All") ) +
-#. button( FORWARD, _("Forward") ) + spacer +
-#. button( DELETE, _("Delete") ) + spacer +
+#. button( REPLY, _t("Reply") ) +
+#. button( REPLYALL, _t("Reply All") ) +
+#. button( FORWARD, _t("Forward") ) + spacer +
+#. button( DELETE, _t("Delete") ) + spacer +
 #: src/src/i2p/susi/webmail/WebMail.java:2188
 msgid "Check Mail"
 msgstr ""
 
 #. if (Config.hasConfigFile())
-#. out.println(button( RELOAD, _("Reload Config") ) + spacer);
+#. out.println(button( RELOAD, _t("Reload Config") ) + spacer);
 #: src/src/i2p/susi/webmail/WebMail.java:2191
 msgid "Logout"
 msgstr ""
diff --git a/apps/susimail/locale/messages_es.po b/apps/susimail/locale/messages_es.po
index 40cb638785..0bfd0f9ddb 100644
--- a/apps/susimail/locale/messages_es.po
+++ b/apps/susimail/locale/messages_es.po
@@ -356,16 +356,16 @@ msgstr "Nuevo"
 
 #. In theory, these are valid and will apply to the first checked message,
 #. but that's not obvious and did it work?
-#. button( REPLY, _("Reply") ) +
-#. button( REPLYALL, _("Reply All") ) +
-#. button( FORWARD, _("Forward") ) + spacer +
-#. button( DELETE, _("Delete") ) + spacer +
+#. button( REPLY, _t("Reply") ) +
+#. button( REPLYALL, _t("Reply All") ) +
+#. button( FORWARD, _t("Forward") ) + spacer +
+#. button( DELETE, _t("Delete") ) + spacer +
 #: src/src/i2p/susi/webmail/WebMail.java:2186
 msgid "Check Mail"
 msgstr "Comprobar correo"
 
 #. if (Config.hasConfigFile())
-#. out.println(button( RELOAD, _("Reload Config") ) + spacer);
+#. out.println(button( RELOAD, _t("Reload Config") ) + spacer);
 #: src/src/i2p/susi/webmail/WebMail.java:2189
 msgid "Logout"
 msgstr "Desconectarse"
diff --git a/apps/susimail/locale/messages_fi.po b/apps/susimail/locale/messages_fi.po
index c37c070e2e..9ce897ac07 100644
--- a/apps/susimail/locale/messages_fi.po
+++ b/apps/susimail/locale/messages_fi.po
@@ -350,16 +350,16 @@ msgstr "Uusi"
 
 #. In theory, these are valid and will apply to the first checked message,
 #. but that's not obvious and did it work?
-#. button( REPLY, _("Reply") ) +
-#. button( REPLYALL, _("Reply All") ) +
-#. button( FORWARD, _("Forward") ) + spacer +
-#. button( DELETE, _("Delete") ) + spacer +
+#. button( REPLY, _t("Reply") ) +
+#. button( REPLYALL, _t("Reply All") ) +
+#. button( FORWARD, _t("Forward") ) + spacer +
+#. button( DELETE, _t("Delete") ) + spacer +
 #: src/src/i2p/susi/webmail/WebMail.java:2186
 msgid "Check Mail"
 msgstr "Tarkista posti"
 
 #. if (Config.hasConfigFile())
-#. out.println(button( RELOAD, _("Reload Config") ) + spacer);
+#. out.println(button( RELOAD, _t("Reload Config") ) + spacer);
 #: src/src/i2p/susi/webmail/WebMail.java:2189
 msgid "Logout"
 msgstr "Kirjaudu ulos"
diff --git a/apps/susimail/locale/messages_fr.po b/apps/susimail/locale/messages_fr.po
index 8ee42b197f..595bf77cb7 100644
--- a/apps/susimail/locale/messages_fr.po
+++ b/apps/susimail/locale/messages_fr.po
@@ -354,16 +354,16 @@ msgstr "Nouveau message"
 
 #. In theory, these are valid and will apply to the first checked message,
 #. but that's not obvious and did it work?
-#. button( REPLY, _("Reply") ) +
-#. button( REPLYALL, _("Reply All") ) +
-#. button( FORWARD, _("Forward") ) + spacer +
-#. button( DELETE, _("Delete") ) + spacer +
+#. button( REPLY, _t("Reply") ) +
+#. button( REPLYALL, _t("Reply All") ) +
+#. button( FORWARD, _t("Forward") ) + spacer +
+#. button( DELETE, _t("Delete") ) + spacer +
 #: src/src/i2p/susi/webmail/WebMail.java:2186
 msgid "Check Mail"
 msgstr "Relever le courrier"
 
 #. if (Config.hasConfigFile())
-#. out.println(button( RELOAD, _("Reload Config") ) + spacer);
+#. out.println(button( RELOAD, _t("Reload Config") ) + spacer);
 #: src/src/i2p/susi/webmail/WebMail.java:2189
 msgid "Logout"
 msgstr "Déconnexion"
diff --git a/apps/susimail/locale/messages_hu.po b/apps/susimail/locale/messages_hu.po
index c5dd2c31f8..5d8352900e 100644
--- a/apps/susimail/locale/messages_hu.po
+++ b/apps/susimail/locale/messages_hu.po
@@ -348,16 +348,16 @@ msgstr "Új"
 
 #. In theory, these are valid and will apply to the first checked message,
 #. but that's not obvious and did it work?
-#. button( REPLY, _("Reply") ) +
-#. button( REPLYALL, _("Reply All") ) +
-#. button( FORWARD, _("Forward") ) + spacer +
-#. button( DELETE, _("Delete") ) + spacer +
+#. button( REPLY, _t("Reply") ) +
+#. button( REPLYALL, _t("Reply All") ) +
+#. button( FORWARD, _t("Forward") ) + spacer +
+#. button( DELETE, _t("Delete") ) + spacer +
 #: src/src/i2p/susi/webmail/WebMail.java:2186
 msgid "Check Mail"
 msgstr "Új Levelek Ellenőrzése"
 
 #. if (Config.hasConfigFile())
-#. out.println(button( RELOAD, _("Reload Config") ) + spacer);
+#. out.println(button( RELOAD, _t("Reload Config") ) + spacer);
 #: src/src/i2p/susi/webmail/WebMail.java:2189
 msgid "Logout"
 msgstr "Kijelentkezés"
diff --git a/apps/susimail/locale/messages_in.po b/apps/susimail/locale/messages_in.po
index f858cc350b..db4feaf7a4 100644
--- a/apps/susimail/locale/messages_in.po
+++ b/apps/susimail/locale/messages_in.po
@@ -347,16 +347,16 @@ msgstr "Baru"
 
 #. In theory, these are valid and will apply to the first checked message,
 #. but that's not obvious and did it work?
-#. button( REPLY, _("Reply") ) +
-#. button( REPLYALL, _("Reply All") ) +
-#. button( FORWARD, _("Forward") ) + spacer +
-#. button( DELETE, _("Delete") ) + spacer +
+#. button( REPLY, _t("Reply") ) +
+#. button( REPLYALL, _t("Reply All") ) +
+#. button( FORWARD, _t("Forward") ) + spacer +
+#. button( DELETE, _t("Delete") ) + spacer +
 #: src/src/i2p/susi/webmail/WebMail.java:2186
 msgid "Check Mail"
 msgstr "Periksa Surat"
 
 #. if (Config.hasConfigFile())
-#. out.println(button( RELOAD, _("Reload Config") ) + spacer);
+#. out.println(button( RELOAD, _t("Reload Config") ) + spacer);
 #: src/src/i2p/susi/webmail/WebMail.java:2189
 msgid "Logout"
 msgstr "Keluar"
diff --git a/apps/susimail/locale/messages_it.po b/apps/susimail/locale/messages_it.po
index cc9dc0ab35..e540a8d81a 100644
--- a/apps/susimail/locale/messages_it.po
+++ b/apps/susimail/locale/messages_it.po
@@ -351,16 +351,16 @@ msgstr "Nuovo"
 
 #. In theory, these are valid and will apply to the first checked message,
 #. but that's not obvious and did it work?
-#. button( REPLY, _("Reply") ) +
-#. button( REPLYALL, _("Reply All") ) +
-#. button( FORWARD, _("Forward") ) + spacer +
-#. button( DELETE, _("Delete") ) + spacer +
+#. button( REPLY, _t("Reply") ) +
+#. button( REPLYALL, _t("Reply All") ) +
+#. button( FORWARD, _t("Forward") ) + spacer +
+#. button( DELETE, _t("Delete") ) + spacer +
 #: src/src/i2p/susi/webmail/WebMail.java:2186
 msgid "Check Mail"
 msgstr "Controlla Mail"
 
 #. if (Config.hasConfigFile())
-#. out.println(button( RELOAD, _("Reload Config") ) + spacer);
+#. out.println(button( RELOAD, _t("Reload Config") ) + spacer);
 #: src/src/i2p/susi/webmail/WebMail.java:2189
 msgid "Logout"
 msgstr "Disconnettiti"
diff --git a/apps/susimail/locale/messages_ja.po b/apps/susimail/locale/messages_ja.po
index 640fccf36e..1a610362fc 100644
--- a/apps/susimail/locale/messages_ja.po
+++ b/apps/susimail/locale/messages_ja.po
@@ -349,16 +349,16 @@ msgstr "新着"
 
 #. In theory, these are valid and will apply to the first checked message,
 #. but that's not obvious and did it work?
-#. button( REPLY, _("Reply") ) +
-#. button( REPLYALL, _("Reply All") ) +
-#. button( FORWARD, _("Forward") ) + spacer +
-#. button( DELETE, _("Delete") ) + spacer +
+#. button( REPLY, _t("Reply") ) +
+#. button( REPLYALL, _t("Reply All") ) +
+#. button( FORWARD, _t("Forward") ) + spacer +
+#. button( DELETE, _t("Delete") ) + spacer +
 #: src/src/i2p/susi/webmail/WebMail.java:2186
 msgid "Check Mail"
 msgstr "メールをチェック"
 
 #. if (Config.hasConfigFile())
-#. out.println(button( RELOAD, _("Reload Config") ) + spacer);
+#. out.println(button( RELOAD, _t("Reload Config") ) + spacer);
 #: src/src/i2p/susi/webmail/WebMail.java:2189
 msgid "Logout"
 msgstr "ログアウト"
diff --git a/apps/susimail/locale/messages_mg.po b/apps/susimail/locale/messages_mg.po
index 8b974d0931..a830530d9f 100644
--- a/apps/susimail/locale/messages_mg.po
+++ b/apps/susimail/locale/messages_mg.po
@@ -349,16 +349,16 @@ msgstr "Vaovao"
 
 #. In theory, these are valid and will apply to the first checked message,
 #. but that's not obvious and did it work?
-#. button( REPLY, _("Reply") ) +
-#. button( REPLYALL, _("Reply All") ) +
-#. button( FORWARD, _("Forward") ) + spacer +
-#. button( DELETE, _("Delete") ) + spacer +
+#. button( REPLY, _t("Reply") ) +
+#. button( REPLYALL, _t("Reply All") ) +
+#. button( FORWARD, _t("Forward") ) + spacer +
+#. button( DELETE, _t("Delete") ) + spacer +
 #: src/src/i2p/susi/webmail/WebMail.java:2188
 msgid "Check Mail"
 msgstr "Sintony ny mailaka"
 
 #. if (Config.hasConfigFile())
-#. out.println(button( RELOAD, _("Reload Config") ) + spacer);
+#. out.println(button( RELOAD, _t("Reload Config") ) + spacer);
 #: src/src/i2p/susi/webmail/WebMail.java:2191
 msgid "Logout"
 msgstr "Mialà"
diff --git a/apps/susimail/locale/messages_nl.po b/apps/susimail/locale/messages_nl.po
index e03d7961a5..440cf79ea0 100644
--- a/apps/susimail/locale/messages_nl.po
+++ b/apps/susimail/locale/messages_nl.po
@@ -352,16 +352,16 @@ msgstr "Nieuw"
 
 #. In theory, these are valid and will apply to the first checked message,
 #. but that's not obvious and did it work?
-#. button( REPLY, _("Reply") ) +
-#. button( REPLYALL, _("Reply All") ) +
-#. button( FORWARD, _("Forward") ) + spacer +
-#. button( DELETE, _("Delete") ) + spacer +
+#. button( REPLY, _t("Reply") ) +
+#. button( REPLYALL, _t("Reply All") ) +
+#. button( FORWARD, _t("Forward") ) + spacer +
+#. button( DELETE, _t("Delete") ) + spacer +
 #: src/src/i2p/susi/webmail/WebMail.java:2188
 msgid "Check Mail"
 msgstr "Controlleer Mail"
 
 #. if (Config.hasConfigFile())
-#. out.println(button( RELOAD, _("Reload Config") ) + spacer);
+#. out.println(button( RELOAD, _t("Reload Config") ) + spacer);
 #: src/src/i2p/susi/webmail/WebMail.java:2191
 msgid "Logout"
 msgstr "Uitloggen"
diff --git a/apps/susimail/locale/messages_pl.po b/apps/susimail/locale/messages_pl.po
index e583c169d5..6d15f2ecf5 100644
--- a/apps/susimail/locale/messages_pl.po
+++ b/apps/susimail/locale/messages_pl.po
@@ -353,16 +353,16 @@ msgstr "Nowy list"
 
 #. In theory, these are valid and will apply to the first checked message,
 #. but that's not obvious and did it work?
-#. button( REPLY, _("Reply") ) +
-#. button( REPLYALL, _("Reply All") ) +
-#. button( FORWARD, _("Forward") ) + spacer +
-#. button( DELETE, _("Delete") ) + spacer +
+#. button( REPLY, _t("Reply") ) +
+#. button( REPLYALL, _t("Reply All") ) +
+#. button( FORWARD, _t("Forward") ) + spacer +
+#. button( DELETE, _t("Delete") ) + spacer +
 #: src/src/i2p/susi/webmail/WebMail.java:2186
 msgid "Check Mail"
 msgstr "Sprawdź pocztę"
 
 #. if (Config.hasConfigFile())
-#. out.println(button( RELOAD, _("Reload Config") ) + spacer);
+#. out.println(button( RELOAD, _t("Reload Config") ) + spacer);
 #: src/src/i2p/susi/webmail/WebMail.java:2189
 msgid "Logout"
 msgstr "Wyloguj siÄ™"
diff --git a/apps/susimail/locale/messages_pt.po b/apps/susimail/locale/messages_pt.po
index 5bfc5d278f..93c12dcf28 100644
--- a/apps/susimail/locale/messages_pt.po
+++ b/apps/susimail/locale/messages_pt.po
@@ -350,16 +350,16 @@ msgstr "Novo"
 
 #. In theory, these are valid and will apply to the first checked message,
 #. but that's not obvious and did it work?
-#. button( REPLY, _("Reply") ) +
-#. button( REPLYALL, _("Reply All") ) +
-#. button( FORWARD, _("Forward") ) + spacer +
-#. button( DELETE, _("Delete") ) + spacer +
+#. button( REPLY, _t("Reply") ) +
+#. button( REPLYALL, _t("Reply All") ) +
+#. button( FORWARD, _t("Forward") ) + spacer +
+#. button( DELETE, _t("Delete") ) + spacer +
 #: src/src/i2p/susi/webmail/WebMail.java:2186
 msgid "Check Mail"
 msgstr "Verificar e-mail"
 
 #. if (Config.hasConfigFile())
-#. out.println(button( RELOAD, _("Reload Config") ) + spacer);
+#. out.println(button( RELOAD, _t("Reload Config") ) + spacer);
 #: src/src/i2p/susi/webmail/WebMail.java:2189
 msgid "Logout"
 msgstr "Desconectar"
diff --git a/apps/susimail/locale/messages_pt_BR.po b/apps/susimail/locale/messages_pt_BR.po
index c2490e9040..03e36703c2 100644
--- a/apps/susimail/locale/messages_pt_BR.po
+++ b/apps/susimail/locale/messages_pt_BR.po
@@ -353,16 +353,16 @@ msgstr "Novo"
 
 #. In theory, these are valid and will apply to the first checked message,
 #. but that's not obvious and did it work?
-#. button( REPLY, _("Reply") ) +
-#. button( REPLYALL, _("Reply All") ) +
-#. button( FORWARD, _("Forward") ) + spacer +
-#. button( DELETE, _("Delete") ) + spacer +
+#. button( REPLY, _t("Reply") ) +
+#. button( REPLYALL, _t("Reply All") ) +
+#. button( FORWARD, _t("Forward") ) + spacer +
+#. button( DELETE, _t("Delete") ) + spacer +
 #: src/src/i2p/susi/webmail/WebMail.java:2188
 msgid "Check Mail"
 msgstr "Verificar correio"
 
 #. if (Config.hasConfigFile())
-#. out.println(button( RELOAD, _("Reload Config") ) + spacer);
+#. out.println(button( RELOAD, _t("Reload Config") ) + spacer);
 #: src/src/i2p/susi/webmail/WebMail.java:2191
 msgid "Logout"
 msgstr "Sair"
diff --git a/apps/susimail/locale/messages_ro.po b/apps/susimail/locale/messages_ro.po
index e9e785d97a..e0c01d01a9 100644
--- a/apps/susimail/locale/messages_ro.po
+++ b/apps/susimail/locale/messages_ro.po
@@ -352,16 +352,16 @@ msgstr "Nou"
 
 #. In theory, these are valid and will apply to the first checked message,
 #. but that's not obvious and did it work?
-#. button( REPLY, _("Reply") ) +
-#. button( REPLYALL, _("Reply All") ) +
-#. button( FORWARD, _("Forward") ) + spacer +
-#. button( DELETE, _("Delete") ) + spacer +
+#. button( REPLY, _t("Reply") ) +
+#. button( REPLYALL, _t("Reply All") ) +
+#. button( FORWARD, _t("Forward") ) + spacer +
+#. button( DELETE, _t("Delete") ) + spacer +
 #: src/src/i2p/susi/webmail/WebMail.java:2186
 msgid "Check Mail"
 msgstr "Verifica e-mail"
 
 #. if (Config.hasConfigFile())
-#. out.println(button( RELOAD, _("Reload Config") ) + spacer);
+#. out.println(button( RELOAD, _t("Reload Config") ) + spacer);
 #: src/src/i2p/susi/webmail/WebMail.java:2189
 msgid "Logout"
 msgstr "Ieșire"
diff --git a/apps/susimail/locale/messages_ru.po b/apps/susimail/locale/messages_ru.po
index 94c01edac9..d2420e6e07 100644
--- a/apps/susimail/locale/messages_ru.po
+++ b/apps/susimail/locale/messages_ru.po
@@ -353,16 +353,16 @@ msgstr "Новое"
 
 #. In theory, these are valid and will apply to the first checked message,
 #. but that's not obvious and did it work?
-#. button( REPLY, _("Reply") ) +
-#. button( REPLYALL, _("Reply All") ) +
-#. button( FORWARD, _("Forward") ) + spacer +
-#. button( DELETE, _("Delete") ) + spacer +
+#. button( REPLY, _t("Reply") ) +
+#. button( REPLYALL, _t("Reply All") ) +
+#. button( FORWARD, _t("Forward") ) + spacer +
+#. button( DELETE, _t("Delete") ) + spacer +
 #: src/src/i2p/susi/webmail/WebMail.java:2186
 msgid "Check Mail"
 msgstr "Проверить почту"
 
 #. if (Config.hasConfigFile())
-#. out.println(button( RELOAD, _("Reload Config") ) + spacer);
+#. out.println(button( RELOAD, _t("Reload Config") ) + spacer);
 #: src/src/i2p/susi/webmail/WebMail.java:2189
 msgid "Logout"
 msgstr "Выйти"
diff --git a/apps/susimail/locale/messages_sq.po b/apps/susimail/locale/messages_sq.po
index 16888a368c..ff9ef6a80c 100644
--- a/apps/susimail/locale/messages_sq.po
+++ b/apps/susimail/locale/messages_sq.po
@@ -349,16 +349,16 @@ msgstr "I ri / e re"
 
 #. In theory, these are valid and will apply to the first checked message,
 #. but that's not obvious and did it work?
-#. button( REPLY, _("Reply") ) +
-#. button( REPLYALL, _("Reply All") ) +
-#. button( FORWARD, _("Forward") ) + spacer +
-#. button( DELETE, _("Delete") ) + spacer +
+#. button( REPLY, _t("Reply") ) +
+#. button( REPLYALL, _t("Reply All") ) +
+#. button( FORWARD, _t("Forward") ) + spacer +
+#. button( DELETE, _t("Delete") ) + spacer +
 #: src/src/i2p/susi/webmail/WebMail.java:2186
 msgid "Check Mail"
 msgstr "Shiko E-postin"
 
 #. if (Config.hasConfigFile())
-#. out.println(button( RELOAD, _("Reload Config") ) + spacer);
+#. out.println(button( RELOAD, _t("Reload Config") ) + spacer);
 #: src/src/i2p/susi/webmail/WebMail.java:2189
 msgid "Logout"
 msgstr "Logout"
diff --git a/apps/susimail/locale/messages_sv.po b/apps/susimail/locale/messages_sv.po
index cfe5ba5821..6635560a1c 100644
--- a/apps/susimail/locale/messages_sv.po
+++ b/apps/susimail/locale/messages_sv.po
@@ -350,16 +350,16 @@ msgstr "Ny"
 
 #. In theory, these are valid and will apply to the first checked message,
 #. but that's not obvious and did it work?
-#. button( REPLY, _("Reply") ) +
-#. button( REPLYALL, _("Reply All") ) +
-#. button( FORWARD, _("Forward") ) + spacer +
-#. button( DELETE, _("Delete") ) + spacer +
+#. button( REPLY, _t("Reply") ) +
+#. button( REPLYALL, _t("Reply All") ) +
+#. button( FORWARD, _t("Forward") ) + spacer +
+#. button( DELETE, _t("Delete") ) + spacer +
 #: src/src/i2p/susi/webmail/WebMail.java:2188
 msgid "Check Mail"
 msgstr "Kolla e-post"
 
 #. if (Config.hasConfigFile())
-#. out.println(button( RELOAD, _("Reload Config") ) + spacer);
+#. out.println(button( RELOAD, _t("Reload Config") ) + spacer);
 #: src/src/i2p/susi/webmail/WebMail.java:2191
 msgid "Logout"
 msgstr "Logga ut"
diff --git a/apps/susimail/locale/messages_uk.po b/apps/susimail/locale/messages_uk.po
index a8e313fdb9..db88df98fb 100644
--- a/apps/susimail/locale/messages_uk.po
+++ b/apps/susimail/locale/messages_uk.po
@@ -355,16 +355,16 @@ msgstr "Новий"
 
 #. In theory, these are valid and will apply to the first checked message,
 #. but that's not obvious and did it work?
-#. button( REPLY, _("Reply") ) +
-#. button( REPLYALL, _("Reply All") ) +
-#. button( FORWARD, _("Forward") ) + spacer +
-#. button( DELETE, _("Delete") ) + spacer +
+#. button( REPLY, _t("Reply") ) +
+#. button( REPLYALL, _t("Reply All") ) +
+#. button( FORWARD, _t("Forward") ) + spacer +
+#. button( DELETE, _t("Delete") ) + spacer +
 #: src/src/i2p/susi/webmail/WebMail.java:2188
 msgid "Check Mail"
 msgstr "Перевірити пошту"
 
 #. if (Config.hasConfigFile())
-#. out.println(button( RELOAD, _("Reload Config") ) + spacer);
+#. out.println(button( RELOAD, _t("Reload Config") ) + spacer);
 #: src/src/i2p/susi/webmail/WebMail.java:2191
 msgid "Logout"
 msgstr "Вийти"
diff --git a/apps/susimail/locale/messages_vi.po b/apps/susimail/locale/messages_vi.po
index 4c72fd72d0..da70b58453 100644
--- a/apps/susimail/locale/messages_vi.po
+++ b/apps/susimail/locale/messages_vi.po
@@ -347,16 +347,16 @@ msgstr "Má»›i"
 
 #. In theory, these are valid and will apply to the first checked message,
 #. but that's not obvious and did it work?
-#. button( REPLY, _("Reply") ) +
-#. button( REPLYALL, _("Reply All") ) +
-#. button( FORWARD, _("Forward") ) + spacer +
-#. button( DELETE, _("Delete") ) + spacer +
+#. button( REPLY, _t("Reply") ) +
+#. button( REPLYALL, _t("Reply All") ) +
+#. button( FORWARD, _t("Forward") ) + spacer +
+#. button( DELETE, _t("Delete") ) + spacer +
 #: src/src/i2p/susi/webmail/WebMail.java:2186
 msgid "Check Mail"
 msgstr "Lấy thư"
 
 #. if (Config.hasConfigFile())
-#. out.println(button( RELOAD, _("Reload Config") ) + spacer);
+#. out.println(button( RELOAD, _t("Reload Config") ) + spacer);
 #: src/src/i2p/susi/webmail/WebMail.java:2189
 msgid "Logout"
 msgstr "Đăng xuất"
diff --git a/apps/susimail/locale/messages_zh.po b/apps/susimail/locale/messages_zh.po
index ed7c143b81..8c11975976 100644
--- a/apps/susimail/locale/messages_zh.po
+++ b/apps/susimail/locale/messages_zh.po
@@ -350,16 +350,16 @@ msgstr "新建"
 
 #. In theory, these are valid and will apply to the first checked message,
 #. but that's not obvious and did it work?
-#. button( REPLY, _("Reply") ) +
-#. button( REPLYALL, _("Reply All") ) +
-#. button( FORWARD, _("Forward") ) + spacer +
-#. button( DELETE, _("Delete") ) + spacer +
+#. button( REPLY, _t("Reply") ) +
+#. button( REPLYALL, _t("Reply All") ) +
+#. button( FORWARD, _t("Forward") ) + spacer +
+#. button( DELETE, _t("Delete") ) + spacer +
 #: src/src/i2p/susi/webmail/WebMail.java:2186
 msgid "Check Mail"
 msgstr "检查邮件"
 
 #. if (Config.hasConfigFile())
-#. out.println(button( RELOAD, _("Reload Config") ) + spacer);
+#. out.println(button( RELOAD, _t("Reload Config") ) + spacer);
 #: src/src/i2p/susi/webmail/WebMail.java:2189
 msgid "Logout"
 msgstr "注销"
diff --git a/apps/susimail/src/src/i2p/susi/webmail/MailPart.java b/apps/susimail/src/src/i2p/susi/webmail/MailPart.java
index bda56ba589..0ec32abe93 100644
--- a/apps/susimail/src/src/i2p/susi/webmail/MailPart.java
+++ b/apps/susimail/src/src/i2p/susi/webmail/MailPart.java
@@ -204,7 +204,7 @@ class MailPart {
 		}
 		Encoding enc = EncodingFactory.getEncoding(encg);
 		if(enc == null)
-			throw new DecodingException(_("No encoder found for encoding \\''{0}\\''.", WebMail.quoteHTML(encg)));
+			throw new DecodingException(_t("No encoder found for encoding \\''{0}\\''.", WebMail.quoteHTML(encg)));
 		return enc.decode(buffer.content, beginBody + offset, end - beginBody - offset);
 	}
 
@@ -294,7 +294,7 @@ class MailPart {
 	}
 
 	/** translate */
-	private static String _(String s, Object o) {
+	private static String _t(String s, Object o) {
 		return Messages.getString(s, o);
 	}
 }
diff --git a/apps/susimail/src/src/i2p/susi/webmail/Messages.java b/apps/susimail/src/src/i2p/susi/webmail/Messages.java
index 84b97450e2..4d1263447f 100644
--- a/apps/susimail/src/src/i2p/susi/webmail/Messages.java
+++ b/apps/susimail/src/src/i2p/susi/webmail/Messages.java
@@ -16,7 +16,7 @@ public class Messages {
     }
 
     /** lang in routerconsole.lang property, else current locale */
-    public String _(String key) {
+    public String _t(String key) {
         return Translate.getString(key, _context, BUNDLE_NAME);
     }
 
diff --git a/apps/susimail/src/src/i2p/susi/webmail/WebMail.java b/apps/susimail/src/src/i2p/susi/webmail/WebMail.java
index 4df447af85..5f6975bc51 100644
--- a/apps/susimail/src/src/i2p/susi/webmail/WebMail.java
+++ b/apps/susimail/src/src/i2p/susi/webmail/WebMail.java
@@ -322,11 +322,11 @@ public class WebMail extends HttpServlet
 			} else if (as.toLowerCase().startsWith("fwd:")) {
 				as = as.substring(4).trim();
 			} else {
-				String xre = _("Re:").toLowerCase();
+				String xre = _t("Re:").toLowerCase();
 				if (as.toLowerCase().startsWith(xre)) {
 					as = as.substring(xre.length()).trim();
 				} else {
-					String xfwd = _("Fwd:").toLowerCase();
+					String xfwd = _t("Fwd:").toLowerCase();
 					if (as.toLowerCase().startsWith(xfwd))
 						as = as.substring(xfwd.length()).trim();
 				}
@@ -336,11 +336,11 @@ public class WebMail extends HttpServlet
 			} else if (bs.toLowerCase().startsWith("fwd:")) {
 				bs = bs.substring(4).trim();
 			} else {
-				String xre = _("Re:").toLowerCase();
+				String xre = _t("Re:").toLowerCase();
 				if (bs.toLowerCase().startsWith(xre)) {
 					bs = bs.substring(xre.length()).trim();
 				} else {
-					String xfwd = _("Fwd:").toLowerCase();
+					String xfwd = _t("Fwd:").toLowerCase();
 					if (bs.toLowerCase().startsWith(xfwd))
 						bs = bs.substring(xfwd.length()).trim();
 				}
@@ -577,7 +577,7 @@ public class WebMail extends HttpServlet
 					( mailPart.description != null ? mailPart.description + ", " : "" ) +
 					( mailPart.filename != null ? mailPart.filename + ", " : "" ) +
 					( mailPart.name != null ? mailPart.name + ", " : "" ) +
-					( mailPart.type != null ? '(' + mailPart.type + ')' : _("unknown") ) );
+					( mailPart.type != null ? '(' + mailPart.type + ')' : _t("unknown") ) );
 			
 			if( level == 0 && mailPart.version == null ) {
 				/*
@@ -598,7 +598,7 @@ public class WebMail extends HttpServlet
 						charset = "US-ASCII";
 						// don't show this in text mode which is used to include the mail in the reply or forward
 						if (html)
-							reason += _("Warning: no charset found, fallback to US-ASCII.") + br;
+							reason += _t("Warning: no charset found, fallback to US-ASCII.") + br;
 					}
 					try {
 						ReadBuffer decoded = mailPart.decode(0);
@@ -612,11 +612,11 @@ public class WebMail extends HttpServlet
 					}
 					catch( UnsupportedEncodingException uee ) {
 						showBody = false;
-						reason = _("Charset \\''{0}\\'' not supported.", quoteHTML( mailPart.charset )) + br;
+						reason = _t("Charset \\''{0}\\'' not supported.", quoteHTML( mailPart.charset )) + br;
 					}
 					catch (Exception e1) {
 						showBody = false;
-						reason += _("Part ({0}) not shown, because of {1}", ident, e1.toString()) + br;
+						reason += _t("Part ({0}) not shown, because of {1}", ident, e1.toString()) + br;
 					}
 			}
 			if( html )
@@ -652,16 +652,16 @@ public class WebMail extends HttpServlet
 						type.equals("application/x-7z-compressed") || type.equals("application/x-rar-compressed") ||
 						type.equals("application/x-tar") || type.equals("application/x-bzip2"))) {
 						out.println( "<a href=\"" + myself + "?" + RAW_ATTACHMENT + "=" +
-							 mailPart.hashCode() + "\">" + _("Download attachment {0}", ident) + "</a>");
+							 mailPart.hashCode() + "\">" + _t("Download attachment {0}", ident) + "</a>");
 					} else {
 						out.println( "<a target=\"_blank\" href=\"" + myself + "?" + DOWNLOAD + "=" +
-							 mailPart.hashCode() + "\">" + _("Download attachment {0}", ident) + "</a>" +
-							 " (" + _("File is packed into a zipfile for security reasons.") + ')');
+							 mailPart.hashCode() + "\">" + _t("Download attachment {0}", ident) + "</a>" +
+							 " (" + _t("File is packed into a zipfile for security reasons.") + ')');
 					}
 					out.println( "</p>" );					
 				}
 				else {
-					out.println( _("Attachment ({0}).", ident) );
+					out.println( _t("Attachment ({0}).", ident) );
 				}
 			}
 			if( html )
@@ -712,52 +712,52 @@ public class WebMail extends HttpServlet
 			if (buttonPressed(request, LOGIN) || offline) {
 				
 				if( user == null || user.length() == 0 ) {
-					sessionObject.error += _("Need username for authentication.") + '\n';
+					sessionObject.error += _t("Need username for authentication.") + '\n';
 					doContinue = false;
 				}
 				if( pass == null || pass.length() == 0 ) {
-					sessionObject.error += _("Need password for authentication.") + '\n';
+					sessionObject.error += _t("Need password for authentication.") + '\n';
 					doContinue = false;
 				}
 				if( host == null || host.length() == 0 ) {
-					sessionObject.error += _("Need hostname for connect.") + '\n';
+					sessionObject.error += _t("Need hostname for connect.") + '\n';
 					doContinue = false;
 				}
 				int pop3PortNo = 0;
 				if( pop3Port == null || pop3Port.length() == 0 ) {
-					sessionObject.error += _("Need port number for pop3 connect.") + '\n';
+					sessionObject.error += _t("Need port number for pop3 connect.") + '\n';
 					doContinue = false;
 				}
 				else {
 					try {
 						pop3PortNo = Integer.parseInt( pop3Port );
 						if( pop3PortNo < 0 || pop3PortNo > 65535 ) {
-							sessionObject.error += _("POP3 port number is not in range 0..65535.") + '\n';
+							sessionObject.error += _t("POP3 port number is not in range 0..65535.") + '\n';
 							doContinue = false;
 						}
 					}
 					catch( NumberFormatException nfe )
 					{
-						sessionObject.error += _("POP3 port number is invalid.") + '\n';
+						sessionObject.error += _t("POP3 port number is invalid.") + '\n';
 						doContinue = false;
 					}
 				}
 				int smtpPortNo = 0;
 				if( smtpPort == null || smtpPort.length() == 0 ) {
-					sessionObject.error += _("Need port number for smtp connect.") + '\n';
+					sessionObject.error += _t("Need port number for smtp connect.") + '\n';
 					doContinue = false;
 				}
 				else {
 					try {
 						smtpPortNo = Integer.parseInt( smtpPort );
 						if( smtpPortNo < 0 || smtpPortNo > 65535 ) {
-							sessionObject.error += _("SMTP port number is not in range 0..65535.") + '\n';
+							sessionObject.error += _t("SMTP port number is not in range 0..65535.") + '\n';
 							doContinue = false;
 						}
 					}
 					catch( NumberFormatException nfe )
 					{
-						sessionObject.error += _("SMTP port number is invalid.") + '\n';
+						sessionObject.error += _t("SMTP port number is invalid.") + '\n';
 						doContinue = false;
 					}
 				}
@@ -831,10 +831,10 @@ public class WebMail extends HttpServlet
 				sessionObject.mailbox = null;
 				sessionObject.mailCache = null;
 			}
-			sessionObject.info += _("User logged out.") + '\n';
+			sessionObject.info += _t("User logged out.") + '\n';
 			sessionObject.state = STATE_AUTH;
 		} else if( sessionObject.mailbox == null ) {
-			sessionObject.error += _("Internal error, lost connection.") + '\n';
+			sessionObject.error += _t("Internal error, lost connection.") + '\n';
 			sessionObject.state = STATE_AUTH;
 		}
 	}
@@ -988,10 +988,10 @@ public class WebMail extends HttpServlet
 								sessionObject.replyTo = mail.reply;
 							else if( mail.sender != null && Mail.validateAddress( mail.sender ) )
 								sessionObject.replyTo = mail.sender;
-							sessionObject.subject = _("Re:") + ' ' + mail.formattedSubject;
+							sessionObject.subject = _t("Re:") + ' ' + mail.formattedSubject;
 							StringWriter text = new StringWriter();
 							PrintWriter pw = new PrintWriter( text );
-							pw.println( _("On {0} {1} wrote:", mail.formattedDate + " UTC", sessionObject.replyTo) );
+							pw.println( _t("On {0} {1} wrote:", mail.formattedDate + " UTC", sessionObject.replyTo) );
 							StringWriter text2 = new StringWriter();
 							PrintWriter pw2 = new PrintWriter( text2 );
 							showPart( pw2, part, 0, TEXT_ONLY );
@@ -1026,7 +1026,7 @@ public class WebMail extends HttpServlet
 								sessionObject.replyCC = buf.toString();
 						}
 						if( forward ) {
-							sessionObject.subject = _("Fwd:") + ' ' + mail.formattedSubject;
+							sessionObject.subject = _t("Fwd:") + ' ' + mail.formattedSubject;
 							String sender = null;
 							if( mail.reply != null && Mail.validateAddress( mail.reply ) )
 								sender = Mail.getAddress( mail.reply );
@@ -1038,7 +1038,7 @@ public class WebMail extends HttpServlet
 							pw.println();
 							pw.println();
 							pw.println();
-							pw.println( "---- " + _("begin forwarded mail") + " ----" );
+							pw.println( "---- " + _t("begin forwarded mail") + " ----" );
 							pw.println( "From: " + sender );
 							if( mail.to != null ) {
 								String pad = "To: ";
@@ -1060,14 +1060,14 @@ public class WebMail extends HttpServlet
 								pw.print( "Date: " + mail.dateString );
 							pw.println();
 							showPart( pw, part, 0, TEXT_ONLY );
-							pw.println( "----  " + _("end forwarded mail") + "  ----" );
+							pw.println( "----  " + _t("end forwarded mail") + "  ----" );
 							pw.flush();
 							sessionObject.body = text.toString();
 						}
 						sessionObject.state = STATE_NEW;
 					}
 					else {
-						sessionObject.error += _("Could not fetch mail body.") + '\n';
+						sessionObject.error += _t("Could not fetch mail body.") + '\n';
 					}
 				}
 			}
@@ -1097,7 +1097,7 @@ public class WebMail extends HttpServlet
 				}
 				catch( NumberFormatException nfe )
 				{
-					sessionObject.error += _("Message id not valid.") + '\n';
+					sessionObject.error += _t("Message id not valid.") + '\n';
 				}
 			}
 		}
@@ -1135,7 +1135,7 @@ public class WebMail extends HttpServlet
 			int pageSize = Config.getProperty( Folder.PAGESIZE, Folder.DEFAULT_PAGESIZE );
 			if( pageSize != oldPageSize )
 				sessionObject.folder.setPageSize( pageSize );
-			sessionObject.info = _("Configuration reloaded");
+			sessionObject.info = _t("Configuration reloaded");
 		}
 		if( buttonPressed( request, REFRESH ) ) {
 			// TODO how to do a "No new mail" message?
@@ -1196,16 +1196,16 @@ public class WebMail extends HttpServlet
 								);
 							}
 							else {
-								sessionObject.error += _("No Encoding found for {0}", encodeTo) + '\n';
+								sessionObject.error += _t("No Encoding found for {0}", encodeTo) + '\n';
 							}
 						}
 						catch (EncodingException e1) {
-							sessionObject.error += _("Could not encode data: {0}", e1.getMessage());
+							sessionObject.error += _t("Could not encode data: {0}", e1.getMessage());
 						}
 					}
 				}
 				catch (IOException e) {
-					sessionObject.error += _("Error reading uploaded file: {0}", e.getMessage()) + '\n';
+					sessionObject.error += _t("Error reading uploaded file: {0}", e.getMessage()) + '\n';
 				}
 			}
 		}
@@ -1290,10 +1290,10 @@ public class WebMail extends HttpServlet
 				}
 			} catch( NumberFormatException nfe ) {}
 			// error if we get here
-			sessionObject.error += _("Attachment not found.");
+			sessionObject.error += _t("Attachment not found.");
 			if (isRaw) {
 				try {
-					response.sendError(404, _("Attachment not found."));
+					response.sendError(404, _t("Attachment not found."));
 				} catch (IOException ioe) {}
 			}
 		}
@@ -1320,9 +1320,9 @@ public class WebMail extends HttpServlet
 				return true;
 		}
 		// error if we get here
-		sessionObject.error += _("Message not found.");
+		sessionObject.error += _t("Message not found.");
 		try {
-			response.sendError(404, _("Message not found."));
+			response.sendError(404, _t("Message not found."));
 		} catch (IOException ioe) {}
 		return true;
 	}
@@ -1367,7 +1367,7 @@ public class WebMail extends HttpServlet
 					sessionObject.folder.setPageSize( pageSize );
 			}
 			catch( NumberFormatException nfe ) {
-				sessionObject.error += _("Invalid pagesize number, resetting to default value.") + '\n';
+				sessionObject.error += _t("Invalid pagesize number, resetting to default value.") + '\n';
 			}
 		}
 		if( buttonPressed( request, PREVPAGE ) ) {
@@ -1391,7 +1391,7 @@ public class WebMail extends HttpServlet
 			if (m > 0)
 				sessionObject.reallyDelete = true;
 			else
-				sessionObject.error += _("No messages marked for deletion.") + '\n';
+				sessionObject.error += _t("No messages marked for deletion.") + '\n';
 		}
 		else {
 			if( buttonPressed( request, REALLYDELETE ) ) {
@@ -1408,7 +1408,7 @@ public class WebMail extends HttpServlet
 					sessionObject.folder.removeElements(toDelete);
 					sessionObject.pageChanged = true;
 					sessionObject.info += ngettext("1 message deleted.", "{0} messages deleted.", numberDeleted);
-					//sessionObject.error += _("Error deleting message: {0}", sessionObject.mailbox.lastError()) + '\n';
+					//sessionObject.error += _t("Error deleting message: {0}", sessionObject.mailbox.lastError()) + '\n';
 				}
 			}
 			sessionObject.reallyDelete = false;
@@ -1474,7 +1474,7 @@ public class WebMail extends HttpServlet
 				boolean release = !Boolean.parseBoolean(props.getProperty(CONFIG_DEBUG));
 				Debug.setLevel( release ? Debug.ERROR : Debug.DEBUG );
 				sessionObject.state = sessionObject.folder != null ? STATE_LIST : STATE_AUTH;
-				sessionObject.info = _("Configuration saved");
+				sessionObject.info = _t("Configuration saved");
 			} catch (IOException ioe) {
 				sessionObject.error = ioe.toString();
 			}
@@ -1495,7 +1495,7 @@ public class WebMail extends HttpServlet
 			} catch (IOException ioe) {
 				sessionObject.error = ioe.toString();
 			} catch( NumberFormatException nfe ) {
-				sessionObject.error += _("Invalid pagesize number, resetting to default value.") + '\n';
+				sessionObject.error += _t("Invalid pagesize number, resetting to default value.") + '\n';
 			}
 		} else if (buttonPressed(request, CANCEL)) {
 			sessionObject.state = (sessionObject.folder != null) ? STATE_LIST : STATE_AUTH;
@@ -1694,7 +1694,7 @@ public class WebMail extends HttpServlet
 				 * build subtitle
 				 */
 				if( sessionObject.state == STATE_AUTH )
-					subtitle = _("Login");
+					subtitle = _t("Login");
 				else if( sessionObject.state == STATE_LIST ) {
 					// mailbox.getNumMails() forces a connection, don't use it
 					// Not only does it slow things down, but a failure causes all our messages to "vanish"
@@ -1705,11 +1705,11 @@ public class WebMail extends HttpServlet
 					if (mail != null && mail.shortSubject != null)
 						subtitle = mail.shortSubject; // already HTML encoded
 					else
-						subtitle = _("Show Message");
+						subtitle = _t("Show Message");
 				} else if( sessionObject.state == STATE_NEW ) {
-					subtitle = _("New Message");
+					subtitle = _t("New Message");
 				} else if( sessionObject.state == STATE_CONFIG ) {
-					subtitle = _("Configuration");
+					subtitle = _t("Configuration");
 				}
 
 				response.setContentType( "text/html" );
@@ -1720,7 +1720,7 @@ public class WebMail extends HttpServlet
 				out.println( "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n<html>\n" +
 					"<head>\n" +
 					"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n" +
-					"<title>" + _("SusiMail") + " - " + subtitle + "</title>\n" +
+					"<title>" + _t("SusiMail") + " - " + subtitle + "</title>\n" +
 					"<link rel=\"stylesheet\" type=\"text/css\" href=\"" + sessionObject.themePath + "susimail.css\">\n" );
 				if (sessionObject.isMobile ) {
 					out.println( "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=2.0, user-scalable=yes\" />\n" +
@@ -1733,7 +1733,7 @@ public class WebMail extends HttpServlet
 					out.println(
 						"<script type=\"text/javascript\">\n" +
 							"window.onbeforeunload = function () {" +
-								"return \"" + _("Message has not been sent. Do you want to discard it?") + "\";" +
+								"return \"" + _t("Message has not been sent. Do you want to discard it?") + "\";" +
 							"};\n" +
 						"</script>"
 					);
@@ -1795,7 +1795,7 @@ public class WebMail extends HttpServlet
 						content = part.decode(2);
 					}
 					catch (DecodingException e) {
-						sessionObject.error += _("Error decoding content: {0}", e.getMessage()) + '\n';
+						sessionObject.error += _t("Error decoding content: {0}", e.getMessage()) + '\n';
 						content = null;
 					}
 			}
@@ -1904,7 +1904,7 @@ public class WebMail extends HttpServlet
 		String to = request.getParameter( NEW_TO );
 		String cc = request.getParameter( NEW_CC );
 		String bcc = request.getParameter( NEW_BCC );
-		String subject = request.getParameter( NEW_SUBJECT, _("no subject") );
+		String subject = request.getParameter( NEW_SUBJECT, _t("no subject") );
 		String text = request.getParameter( NEW_TEXT, "" );
 
 		boolean fixed = Boolean.parseBoolean(Config.getProperty( CONFIG_SENDER_FIXED, "true" ));
@@ -1921,13 +1921,13 @@ public class WebMail extends HttpServlet
 		
 		if( from == null || !Mail.validateAddress( from ) ) {
 			ok = false;
-			sessionObject.error += _("Found no valid sender address.") + '\n';
+			sessionObject.error += _t("Found no valid sender address.") + '\n';
 		}
 		else {
 			sender = Mail.getAddress( from );
 			if( sender == null || sender.length() == 0 ) {
 				ok = false;
-				sessionObject.error += _("Found no valid address in \\''{0}\\''.", quoteHTML( from )) + '\n';
+				sessionObject.error += _t("Found no valid address in \\''{0}\\''.", quoteHTML( from )) + '\n';
 			}
 		}
 		
@@ -1948,7 +1948,7 @@ public class WebMail extends HttpServlet
 		
 		if( toList.isEmpty() ) {
 			ok = false;
-			sessionObject.error += _("No recipients found.") + '\n';
+			sessionObject.error += _t("No recipients found.") + '\n';
 		}
 		Encoding qp = EncodingFactory.getEncoding( "quoted-printable" );
 		Encoding hl = EncodingFactory.getEncoding( "HEADERLINE" );
@@ -2012,7 +2012,7 @@ public class WebMail extends HttpServlet
 						sessionObject.user, sessionObject.pass,
 						sender, recipients.toArray(), sessionObject.sentMail ) ) {
 					
-					sessionObject.info += _("Mail sent.");
+					sessionObject.info += _t("Mail sent.");
 					
 					sessionObject.sentMail = null;	
 					if( sessionObject.attachments != null )
@@ -2056,12 +2056,12 @@ public class WebMail extends HttpServlet
 	private static void showCompose( PrintWriter out, SessionObject sessionObject, RequestWrapper request )
 	{
 		out.println("<div class=\"topbuttons\">");
-		out.println( button( SEND, _("Send") ) + spacer +
-				button( CANCEL, _("Cancel") ));
+		out.println( button( SEND, _t("Send") ) + spacer +
+				button( CANCEL, _t("Cancel") ));
 		out.println("</div>");
 		//if (Config.hasConfigFile())
-		//	out.println(button( RELOAD, _("Reload Config") ) + spacer);
-		//out.println(button( LOGOUT, _("Logout") ) );
+		//	out.println(button( RELOAD, _t("Reload Config") ) + spacer);
+		//out.println(button( LOGOUT, _t("Logout") ) );
 
 		String from = request.getParameter( NEW_FROM );
 		boolean fixed = Boolean.parseBoolean(Config.getProperty( CONFIG_SENDER_FIXED, "true" ));
@@ -2100,23 +2100,23 @@ public class WebMail extends HttpServlet
 		
 		out.println( "<table cellspacing=\"0\" cellpadding=\"5\">\n" +
 				"<tr><td colspan=\"2\" align=\"center\"><hr></td></tr>\n" +
-				"<tr><td align=\"right\">" + _("From") + ":</td><td align=\"left\"><input type=\"text\" size=\"80\" name=\"" + NEW_FROM + "\" value=\"" + quoteHTML(from) + "\" " + ( fixed ? "disabled" : "" ) +"></td></tr>\n" +
-				"<tr><td align=\"right\">" + _("To") + ":</td><td align=\"left\"><input type=\"text\" size=\"80\" name=\"" + NEW_TO + "\" value=\"" + quoteHTML(to) + "\"></td></tr>\n" +
-				"<tr><td align=\"right\">" + _("Cc") + ":</td><td align=\"left\"><input type=\"text\" size=\"80\" name=\"" + NEW_CC + "\" value=\"" + quoteHTML(cc) + "\"></td></tr>\n" +
-				"<tr><td align=\"right\">" + _("Bcc") + ":</td><td align=\"left\"><input type=\"text\" size=\"80\" name=\"" + NEW_BCC + "\" value=\"" + quoteHTML(bcc) + "\"></td></tr>\n" +
-				"<tr><td align=\"right\">" + _("Bcc to self") + ": </td><td align=\"left\"><input type=\"checkbox\" class=\"optbox\" name=\"" + NEW_BCC_TO_SELF + "\" value=\"1\" " + (sessionObject.bccToSelf ? "checked" : "" ) + "></td></tr>\n" +
-				"<tr><td align=\"right\">" + _("Subject") + ":</td><td align=\"left\"><input type=\"text\" size=\"80\" name=\"" + NEW_SUBJECT + "\" value=\"" + quoteHTML(subject) + "\"></td></tr>\n" +
+				"<tr><td align=\"right\">" + _t("From") + ":</td><td align=\"left\"><input type=\"text\" size=\"80\" name=\"" + NEW_FROM + "\" value=\"" + quoteHTML(from) + "\" " + ( fixed ? "disabled" : "" ) +"></td></tr>\n" +
+				"<tr><td align=\"right\">" + _t("To") + ":</td><td align=\"left\"><input type=\"text\" size=\"80\" name=\"" + NEW_TO + "\" value=\"" + quoteHTML(to) + "\"></td></tr>\n" +
+				"<tr><td align=\"right\">" + _t("Cc") + ":</td><td align=\"left\"><input type=\"text\" size=\"80\" name=\"" + NEW_CC + "\" value=\"" + quoteHTML(cc) + "\"></td></tr>\n" +
+				"<tr><td align=\"right\">" + _t("Bcc") + ":</td><td align=\"left\"><input type=\"text\" size=\"80\" name=\"" + NEW_BCC + "\" value=\"" + quoteHTML(bcc) + "\"></td></tr>\n" +
+				"<tr><td align=\"right\">" + _t("Bcc to self") + ": </td><td align=\"left\"><input type=\"checkbox\" class=\"optbox\" name=\"" + NEW_BCC_TO_SELF + "\" value=\"1\" " + (sessionObject.bccToSelf ? "checked" : "" ) + "></td></tr>\n" +
+				"<tr><td align=\"right\">" + _t("Subject") + ":</td><td align=\"left\"><input type=\"text\" size=\"80\" name=\"" + NEW_SUBJECT + "\" value=\"" + quoteHTML(subject) + "\"></td></tr>\n" +
 				"<tr><td colspan=\"2\" align=\"center\"><textarea cols=\"" + Config.getProperty( CONFIG_COMPOSER_COLS, 80 )+ "\" rows=\"" + Config.getProperty( CONFIG_COMPOSER_ROWS, 10 )+ "\" name=\"" + NEW_TEXT + "\">" + text + "</textarea>" +
 				"<tr class=\"bottombuttons\"><td colspan=\"2\" align=\"center\"><hr></td></tr>\n" +
-				"<tr class=\"bottombuttons\"><td align=\"right\">" + _("Add Attachment") + ":</td><td align=\"left\"><input type=\"file\" size=\"50%\" name=\"" + NEW_FILENAME + "\" value=\"\"></td></tr>" +
+				"<tr class=\"bottombuttons\"><td align=\"right\">" + _t("Add Attachment") + ":</td><td align=\"left\"><input type=\"file\" size=\"50%\" name=\"" + NEW_FILENAME + "\" value=\"\"></td></tr>" +
 				// TODO disable/hide in JS if no file selected
-				"<tr class=\"bottombuttons\"><td>&nbsp;</td><td align=\"left\">" + button(NEW_UPLOAD, _("Add another attachment")) + "</td></tr>");
+				"<tr class=\"bottombuttons\"><td>&nbsp;</td><td align=\"left\">" + button(NEW_UPLOAD, _t("Add another attachment")) + "</td></tr>");
 		
 		if( sessionObject.attachments != null && !sessionObject.attachments.isEmpty() ) {
 			boolean wroteHeader = false;
 			for( Attachment attachment : sessionObject.attachments ) {
 				if( !wroteHeader ) {
-					out.println("<tr><td align=\"right\">" + _("Attachments") + ":</td>");
+					out.println("<tr><td align=\"right\">" + _t("Attachments") + ":</td>");
 					wroteHeader = true;
 				} else {
 					out.println("<tr><td align=\"right\">&nbsp;</td>");
@@ -2125,7 +2125,7 @@ public class WebMail extends HttpServlet
 			}
 			// TODO disable in JS if none selected
 			out.println("<tr class=\"bottombuttons\"><td>&nbsp;</td><td align=\"left\">" +
-			            button( DELETE_ATTACHMENT, _("Delete selected attachments") ) +
+			            button( DELETE_ATTACHMENT, _t("Delete selected attachments") ) +
 				    "</td></tr>");
 		}
 		out.println( "</table>" );
@@ -2144,28 +2144,28 @@ public class WebMail extends HttpServlet
 		
 		out.println( "<table cellspacing=\"3\" cellpadding=\"5\">\n" +
 			// current postman hq length limits 16/12, new postman version 32/32
-			"<tr><td align=\"right\" width=\"30%\">" + _("User") + "</td><td width=\"40%\" align=\"left\"><input type=\"text\" size=\"32\" name=\"" + USER + "\" value=\"" + "\"> @mail.i2p</td></tr>\n" +
-			"<tr><td align=\"right\" width=\"30%\">" + _("Password") + "</td><td width=\"40%\" align=\"left\"><input type=\"password\" size=\"32\" name=\"pass\" value=\"" + "\"></td></tr>\n");
+			"<tr><td align=\"right\" width=\"30%\">" + _t("User") + "</td><td width=\"40%\" align=\"left\"><input type=\"text\" size=\"32\" name=\"" + USER + "\" value=\"" + "\"> @mail.i2p</td></tr>\n" +
+			"<tr><td align=\"right\" width=\"30%\">" + _t("Password") + "</td><td width=\"40%\" align=\"left\"><input type=\"password\" size=\"32\" name=\"pass\" value=\"" + "\"></td></tr>\n");
 		// which is better?
 		//if (!fixed) {
 		if (true) {
 		    out.println(
-			"<tr><td align=\"right\" width=\"30%\">" + _("Host") + "</td><td width=\"40%\" align=\"left\"><input type=\"text\" size=\"32\" name=\"" + HOST +"\" value=\"" + quoteHTML(host) + "\"" + ( fixed ? " disabled" : "" ) + "></td></tr>\n" +
-			"<tr><td align=\"right\" width=\"30%\">" + _("POP3 Port") + "</td><td width=\"40%\" align=\"left\"><input type=\"text\" style=\"text-align: right;\" size=\"5\" name=\"" + POP3 +"\" value=\"" + quoteHTML(pop3) + "\"" + ( fixed ? " disabled" : "" ) + "></td></tr>\n" +
-			"<tr><td align=\"right\" width=\"30%\">" + _("SMTP Port") + "</td><td width=\"40%\" align=\"left\"><input type=\"text\" style=\"text-align: right;\" size=\"5\" name=\"" + SMTP +"\" value=\"" + quoteHTML(smtp) + "\"" + ( fixed ? " disabled" : "" ) + "></td></tr>\n");
+			"<tr><td align=\"right\" width=\"30%\">" + _t("Host") + "</td><td width=\"40%\" align=\"left\"><input type=\"text\" size=\"32\" name=\"" + HOST +"\" value=\"" + quoteHTML(host) + "\"" + ( fixed ? " disabled" : "" ) + "></td></tr>\n" +
+			"<tr><td align=\"right\" width=\"30%\">" + _t("POP3 Port") + "</td><td width=\"40%\" align=\"left\"><input type=\"text\" style=\"text-align: right;\" size=\"5\" name=\"" + POP3 +"\" value=\"" + quoteHTML(pop3) + "\"" + ( fixed ? " disabled" : "" ) + "></td></tr>\n" +
+			"<tr><td align=\"right\" width=\"30%\">" + _t("SMTP Port") + "</td><td width=\"40%\" align=\"left\"><input type=\"text\" style=\"text-align: right;\" size=\"5\" name=\"" + SMTP +"\" value=\"" + quoteHTML(smtp) + "\"" + ( fixed ? " disabled" : "" ) + "></td></tr>\n");
 		}
 		out.println(
 			"<tr><td colspan=\"2\">&nbsp;</td></tr>\n" +
-			"<tr><td></td><td align=\"left\">" + button( LOGIN, _("Login") ) + spacer +
-			 button(OFFLINE, _("Read Mail Offline") ) +
+			"<tr><td></td><td align=\"left\">" + button( LOGIN, _t("Login") ) + spacer +
+			 button(OFFLINE, _t("Read Mail Offline") ) +
 			 //spacer +
-			 //" <input class=\"cancel\" type=\"reset\" value=\"" + _("Reset") + "\">" +
+			 //" <input class=\"cancel\" type=\"reset\" value=\"" + _t("Reset") + "\">" +
 			 spacer +
-			 button(CONFIGURE, _("Settings")) +
+			 button(CONFIGURE, _t("Settings")) +
 			"</td></tr>\n" +
 			"<tr><td colspan=\"2\">&nbsp;</td></tr>\n" +
-			"<tr><td></td><td align=\"left\"><a href=\"http://hq.postman.i2p/?page_id=14\">" + _("Learn about I2P mail") + "</a></td></tr>\n" +
-			"<tr><td></td><td align=\"left\"><a href=\"http://hq.postman.i2p/?page_id=16\">" + _("Create Account") + "</a></td></tr>\n" +
+			"<tr><td></td><td align=\"left\"><a href=\"http://hq.postman.i2p/?page_id=14\">" + _t("Learn about I2P mail") + "</a></td></tr>\n" +
+			"<tr><td></td><td align=\"left\"><a href=\"http://hq.postman.i2p/?page_id=16\">" + _t("Create Account") + "</a></td></tr>\n" +
 			"</table>");
 	}
 
@@ -2178,17 +2178,17 @@ public class WebMail extends HttpServlet
 	private static void showFolder( PrintWriter out, SessionObject sessionObject, RequestWrapper request )
 	{
 		out.println("<div class=\"topbuttons\">");
-		out.println( button( NEW, _("New") ) + spacer);
+		out.println( button( NEW, _t("New") ) + spacer);
 			// In theory, these are valid and will apply to the first checked message,
 			// but that's not obvious and did it work?
-			//button( REPLY, _("Reply") ) +
-			//button( REPLYALL, _("Reply All") ) +
-			//button( FORWARD, _("Forward") ) + spacer +
-			//button( DELETE, _("Delete") ) + spacer +
-		out.println(button( REFRESH, _("Check Mail") ) + spacer);
+			//button( REPLY, _t("Reply") ) +
+			//button( REPLYALL, _t("Reply All") ) +
+			//button( FORWARD, _t("Forward") ) + spacer +
+			//button( DELETE, _t("Delete") ) + spacer +
+		out.println(button( REFRESH, _t("Check Mail") ) + spacer);
 		//if (Config.hasConfigFile())
-		//	out.println(button( RELOAD, _("Reload Config") ) + spacer);
-		out.println(button( LOGOUT, _("Logout") ));
+		//	out.println(button( RELOAD, _t("Reload Config") ) + spacer);
+		out.println(button( LOGOUT, _t("Logout") ));
 		if (sessionObject.folder.getPages() > 1)
 			showPageButtons(out, sessionObject.folder);
 		out.println("</div>");
@@ -2199,12 +2199,12 @@ public class WebMail extends HttpServlet
 		out.println("<table id=\"mailbox\" cellspacing=\"0\" cellpadding=\"5\">\n" +
 			"<tr><td colspan=\"9\"><hr></td></tr>\n<tr>" +
 			thSpacer +
-			thSpacer + "<th>" + sortHeader( SORT_SENDER, _("From"), sessionObject.imgPath, curSort, curOrder ) + "</th>" +
-			thSpacer + "<th>" + sortHeader( SORT_SUBJECT, _("Subject"), sessionObject.imgPath, curSort, curOrder ) + "</th>" +
-			thSpacer + "<th>" + sortHeader( SORT_DATE, _("Date"), sessionObject.imgPath, curSort, curOrder ) +
+			thSpacer + "<th>" + sortHeader( SORT_SENDER, _t("From"), sessionObject.imgPath, curSort, curOrder ) + "</th>" +
+			thSpacer + "<th>" + sortHeader( SORT_SUBJECT, _t("Subject"), sessionObject.imgPath, curSort, curOrder ) + "</th>" +
+			thSpacer + "<th>" + sortHeader( SORT_DATE, _t("Date"), sessionObject.imgPath, curSort, curOrder ) +
 			//sortHeader( SORT_ID, "", sessionObject.imgPath ) +
 			"</th>" +
-			thSpacer + "<th>" + sortHeader( SORT_SIZE, _("Size"), sessionObject.imgPath, curSort, curOrder ) + "</th></tr>" );
+			thSpacer + "<th>" + sortHeader( SORT_SIZE, _t("Size"), sessionObject.imgPath, curSort, curOrder ) + "</th></tr>" );
 		int bg = 0;
 		int i = 0;
 		for( Iterator<String> it = sessionObject.folder.currentPageIterator(); it != null && it.hasNext(); ) {
@@ -2245,12 +2245,12 @@ public class WebMail extends HttpServlet
 					"<td><input type=\"checkbox\" class=\"optbox\" name=\"check" + i + "\" value=\"1\"" + 
 					" onclick=\"deleteboxclicked();\" " +
 					( idChecked ? "checked" : "" ) + ">" + "</td><td " + jslink + ">" +
-					(mail.isNew() ? "<img src=\"/susimail/icons/flag_green.png\" alt=\"\" title=\"" + _("Message is new") + "\">" : "&nbsp;") + "</td><td " + jslink + ">" +
+					(mail.isNew() ? "<img src=\"/susimail/icons/flag_green.png\" alt=\"\" title=\"" + _t("Message is new") + "\">" : "&nbsp;") + "</td><td " + jslink + ">" +
                                         // mail.shortSender and mail.shortSubject already html encoded
 					link + mail.shortSender + "</a></td><td " + jslink + ">" +
-					(mail.hasAttachment() ? "<img src=\"/susimail/icons/attach.png\" alt=\"\" title=\"" + _("Message has an attachment") + "\">" : "&nbsp;") + "</td><td " + jslink + ">" +
+					(mail.hasAttachment() ? "<img src=\"/susimail/icons/attach.png\" alt=\"\" title=\"" + _t("Message has an attachment") + "\">" : "&nbsp;") + "</td><td " + jslink + ">" +
 					link + mail.shortSubject + "</a></td><td " + jslink + ">" +
-					(mail.isSpam() ? "<img src=\"/susimail/icons/flag_red.png\" alt=\"\" title=\"" + _("Message is spam") + "\">" : "&nbsp;") + "</td><td " + jslink + ">" +
+					(mail.isSpam() ? "<img src=\"/susimail/icons/flag_red.png\" alt=\"\" title=\"" + _t("Message is spam") + "\">" : "&nbsp;") + "</td><td " + jslink + ">" +
 					// don't let date get split across lines
 					mail.localFormattedDate.replace(" ", "&nbsp;") + "</td><td " + jslink + ">&nbsp;</td><td align=\"right\" " + jslink + ">" +
 					((mail.getSize() > 0) ? (DataHelper.formatSize2(mail.getSize()) + 'B') : "???") + "</td></tr>" );
@@ -2258,7 +2258,7 @@ public class WebMail extends HttpServlet
 			i++;
 		}
 		if (i == 0)
-			out.println("<tr><td colspan=\"9\" align=\"center\"><i>" + _("No messages") + "</i></td></tr>\n</table>");
+			out.println("<tr><td colspan=\"9\" align=\"center\"><i>" + _t("No messages") + "</i></td></tr>\n</table>");
 		if (i > 0) {
 			out.println( "<tr class=\"bottombuttons\"><td colspan=\"9\"><hr></td></tr>");
 			if (sessionObject.folder.getPages() > 1 && i > 30) {
@@ -2270,27 +2270,27 @@ public class WebMail extends HttpServlet
 			out.println("<tr class=\"bottombuttons\"><td colspan=\"5\" align=\"left\">");
 			if( sessionObject.reallyDelete ) {
 				// TODO ngettext
-				out.println("<p class=\"error\">" + _("Really delete the marked messages?") +
-						"</p>" + button( REALLYDELETE, _("Yes, really delete them!") ) +
-						"<br>" + button( CLEAR, _("Cancel")));
+				out.println("<p class=\"error\">" + _t("Really delete the marked messages?") +
+						"</p>" + button( REALLYDELETE, _t("Yes, really delete them!") ) +
+						"<br>" + button( CLEAR, _t("Cancel")));
 			} else {
-				out.println(button( DELETE, _("Delete Selected") ) + "<br>");
+				out.println(button( DELETE, _t("Delete Selected") ) + "<br>");
 				out.print(
-					button( MARKALL, _("Mark All") ) +
+					button( MARKALL, _t("Mark All") ) +
 					"&nbsp;" +
-					button( CLEAR, _("Clear All") ));
+					button( CLEAR, _t("Clear All") ));
 					//"<br>" + 
-					//button( INVERT, _("Invert Selection") ) +
+					//button( INVERT, _t("Invert Selection") ) +
 					//"<br>");
 			}
 			out.print("</td>\n<td colspan=\"4\" align=\"right\">");
 			// moved to config page
 			//out.print(
-			//	_("Page Size") + ":&nbsp;<input type=\"text\" style=\"text-align: right;\" name=\"" + PAGESIZE + "\" size=\"4\" value=\"" +  sessionObject.folder.getPageSize() + "\">" +
+			//	_t("Page Size") + ":&nbsp;<input type=\"text\" style=\"text-align: right;\" name=\"" + PAGESIZE + "\" size=\"4\" value=\"" +  sessionObject.folder.getPageSize() + "\">" +
 			//	"&nbsp;" + 
-			//	button( SETPAGESIZE, _("Set") ) );
+			//	button( SETPAGESIZE, _t("Set") ) );
 			out.print("<br>");
-			out.print(button(CONFIGURE, _("Settings")));
+			out.print(button(CONFIGURE, _t("Settings")));
 			out.println("</td></tr>");
 		}
 		out.println( "</table>");
@@ -2303,14 +2303,14 @@ public class WebMail extends HttpServlet
 		out.println(
 			"<br>" +
 			( folder.isFirstPage() ?
-						button2( FIRSTPAGE, _("First") ) + "&nbsp;" + button2( PREVPAGE, _("Previous") ) :
-						button( FIRSTPAGE, _("First") ) + "&nbsp;" + button( PREVPAGE, _("Previous") ) ) +
+						button2( FIRSTPAGE, _t("First") ) + "&nbsp;" + button2( PREVPAGE, _t("Previous") ) :
+						button( FIRSTPAGE, _t("First") ) + "&nbsp;" + button( PREVPAGE, _t("Previous") ) ) +
 			" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" +
-			_("Page {0} of {1}", folder.getCurrentPage(), folder.getPages()) +
+			_t("Page {0} of {1}", folder.getCurrentPage(), folder.getPages()) +
 			"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " +
 			( folder.isLastPage() ? 
-						button2( NEXTPAGE, _("Next") ) + "&nbsp;" + button2( LASTPAGE, _("Last") ) :
-						button( NEXTPAGE, _("Next") ) + "&nbsp;" + button( LASTPAGE, _("Last") ) )
+						button2( NEXTPAGE, _t("Next") ) + "&nbsp;" + button2( LASTPAGE, _t("Last") ) :
+						button( NEXTPAGE, _t("Next") ) + "&nbsp;" + button( LASTPAGE, _t("Last") ) )
 		);
 	}
 
@@ -2322,7 +2322,7 @@ public class WebMail extends HttpServlet
 	private static void showMessage( PrintWriter out, SessionObject sessionObject )
 	{
 		if( sessionObject.reallyDelete ) {
-			out.println( "<p class=\"error\">" + _("Really delete this message?") + " " + button( REALLYDELETE, _("Yes, really delete it!") ) + "</p>" );
+			out.println( "<p class=\"error\">" + _t("Really delete this message?") + " " + button( REALLYDELETE, _t("Yes, really delete it!") ) + "</p>" );
 		}
 		Mail mail = sessionObject.mailCache.getMail( sessionObject.showUIDL, MailCache.FetchMode.ALL );
 		if(!RELEASE && mail != null && mail.hasBody()) {
@@ -2334,31 +2334,31 @@ public class WebMail extends HttpServlet
 			out.println( "-->" );
 		}
 		out.println("<div class=\"topbuttons\">");
-		out.println( button( NEW, _("New") ) + spacer +
-			button( REPLY, _("Reply") ) +
-			button( REPLYALL, _("Reply All") ) +
-			button( FORWARD, _("Forward") ) + spacer +
-			button( SAVE_AS, _("Save As") ) + spacer);
+		out.println( button( NEW, _t("New") ) + spacer +
+			button( REPLY, _t("Reply") ) +
+			button( REPLYALL, _t("Reply All") ) +
+			button( FORWARD, _t("Forward") ) + spacer +
+			button( SAVE_AS, _t("Save As") ) + spacer);
 		if (sessionObject.reallyDelete)
-			out.println(button2(DELETE, _("Delete")));
+			out.println(button2(DELETE, _t("Delete")));
 		else
-			out.println(button(DELETE, _("Delete")));
+			out.println(button(DELETE, _t("Delete")));
 		out.println("<br>" +
-			( sessionObject.folder.isFirstElement( sessionObject.showUIDL ) ? button2( PREV, _("Previous") ) : button( PREV, _("Previous") ) ) + spacer +
-			button( LIST, _("Back to Folder") ) + spacer +
-			( sessionObject.folder.isLastElement( sessionObject.showUIDL ) ? button2( NEXT, _("Next") ) : button( NEXT, _("Next") ) ));
+			( sessionObject.folder.isFirstElement( sessionObject.showUIDL ) ? button2( PREV, _t("Previous") ) : button( PREV, _t("Previous") ) ) + spacer +
+			button( LIST, _t("Back to Folder") ) + spacer +
+			( sessionObject.folder.isLastElement( sessionObject.showUIDL ) ? button2( NEXT, _t("Next") ) : button( NEXT, _t("Next") ) ));
 		out.println("</div>");
 		//if (Config.hasConfigFile())
-		//	out.println(button( RELOAD, _("Reload Config") ) + spacer);
-		//out.println(button( LOGOUT, _("Logout") ) );
+		//	out.println(button( RELOAD, _t("Reload Config") ) + spacer);
+		//out.println(button( LOGOUT, _t("Logout") ) );
 		if( mail != null ) {
 			out.println( "<table cellspacing=\"0\" cellpadding=\"5\">\n" +
 					"<tr><td colspan=\"2\" align=\"center\"><hr></td></tr>\n" +
-					"<tr class=\"mailhead\"><td align=\"right\" valign=\"top\">" + _("From") +
+					"<tr class=\"mailhead\"><td align=\"right\" valign=\"top\">" + _t("From") +
 					":</td><td align=\"left\">" + quoteHTML( mail.sender ) + "</td></tr>\n" +
-					"<tr class=\"mailhead\"><td align=\"right\" valign=\"top\">" + _("Subject") +
+					"<tr class=\"mailhead\"><td align=\"right\" valign=\"top\">" + _t("Subject") +
 					":</td><td align=\"left\">" + quoteHTML( mail.formattedSubject ) + "</td></tr>\n" +
-					"<tr class=\"mailhead\"><td align=\"right\" valign=\"top\">" + _("Date") +
+					"<tr class=\"mailhead\"><td align=\"right\" valign=\"top\">" + _t("Date") +
 					":</td><td align=\"left\">" + mail.quotedDate + "</td></tr>\n" +
 					"<tr><td colspan=\"2\" align=\"center\"><hr></td></tr>" );
 			if( mail.hasPart()) {
@@ -2366,11 +2366,11 @@ public class WebMail extends HttpServlet
 				showPart( out, mail.getPart(), 0, SHOW_HTML );
 			}
 			else {
-				out.println( "<tr class=\"mailbody\"><td colspan=\"2\" align=\"center\"><p class=\"error\">" + _("Could not fetch mail body.") + "</p></td></tr>" );
+				out.println( "<tr class=\"mailbody\"><td colspan=\"2\" align=\"center\"><p class=\"error\">" + _t("Could not fetch mail body.") + "</p></td></tr>" );
 			}
 		}
 		else {
-			out.println( "<tr class=\"mailbody\"><td colspan=\"2\" align=\"center\"><p class=\"error\">" + _("Could not fetch mail.") + "</p></td></tr>" );
+			out.println( "<tr class=\"mailbody\"><td colspan=\"2\" align=\"center\"><p class=\"error\">" + _t("Could not fetch mail.") + "</p></td></tr>" );
 		}
 		out.println( "<tr><td colspan=\"2\" align=\"center\"><hr></td></tr>\n</table>" );
 	}
@@ -2388,13 +2388,13 @@ public class WebMail extends HttpServlet
 			sz = Config.getProperty(Folder.PAGESIZE, Folder.DEFAULT_PAGESIZE);
 		out.println("<div class=\"topbuttons\">");
 		out.println(
-			_("Folder Page Size") + ":&nbsp;<input type=\"text\" style=\"text-align: right;\" name=\"" + PAGESIZE +
+			_t("Folder Page Size") + ":&nbsp;<input type=\"text\" style=\"text-align: right;\" name=\"" + PAGESIZE +
 			"\" size=\"4\" value=\"" +  sz + "\">" +
 			"&nbsp;" + 
-			button( SETPAGESIZE, _("Set") ) );
+			button( SETPAGESIZE, _t("Set") ) );
 		out.println("<p>");
 		out.println("</div>");
-		out.print(_("Advanced Configuration"));
+		out.print(_t("Advanced Configuration"));
 		Properties config = Config.getProperties();
 		out.print(":</p><textarea cols=\"80\" rows=\"" + Math.max(8, config.size() + 2) + "\" spellcheck=\"false\" name=\"" + CONFIG_TEXT + "\">");
 		for (Map.Entry<Object, Object> e : config.entrySet()) {
@@ -2405,23 +2405,23 @@ public class WebMail extends HttpServlet
 		out.println("</textarea>");
 		out.println("<div id=\"bottombuttons\">");
 		out.println("<br>");
-		out.println(button(SAVE, _("Save Configuration")));
-		out.println(button(CANCEL, _("Cancel")));
+		out.println(button(SAVE, _t("Save Configuration")));
+		out.println(button(CANCEL, _t("Cancel")));
 		out.println("</div>");
 	}
 
 	/** translate */
-	private static String _(String s) {
+	private static String _t(String s) {
 		return Messages.getString(s);
 	}
 
 	/** translate */
-	private static String _(String s, Object o) {
+	private static String _t(String s, Object o) {
 		return Messages.getString(s, o);
 	}
 
 	/** translate */
-	private static String _(String s, Object o, Object o2) {
+	private static String _t(String s, Object o, Object o2) {
 		return Messages.getString(s, o, o2);
 	}
 	
diff --git a/apps/susimail/src/src/i2p/susi/webmail/pop3/POP3MailBox.java b/apps/susimail/src/src/i2p/susi/webmail/pop3/POP3MailBox.java
index f688ddc16a..5ed2018275 100644
--- a/apps/susimail/src/src/i2p/susi/webmail/pop3/POP3MailBox.java
+++ b/apps/susimail/src/src/i2p/susi/webmail/pop3/POP3MailBox.java
@@ -99,7 +99,7 @@ public class POP3MailBox implements NewMailListener {
 		sizes = new HashMap<Integer, Integer>();
 		synchronizer = new Object();
 		// this appears in the UI so translate
-		lastLine = _("No response from server");
+		lastLine = _t("No response from server");
 		lastActive = new AtomicLong(System.currentTimeMillis());
 		lastChecked = new AtomicLong();
 		delayedDeleter = new DelayedDeleter(this);
@@ -665,15 +665,15 @@ public class POP3MailBox implements NewMailListener {
 						idleCloser = new IdleCloser(this);
 				} else {
 					if (lastError.equals(""))
-						lastError = _("Error connecting to server");
+						lastError = _t("Error connecting to server");
 					close();
 				}
 			}
 			catch (NumberFormatException e1) {
-				lastError = _("Error opening mailbox") + ": " + e1;
+				lastError = _t("Error opening mailbox") + ": " + e1;
 			}
 			catch (IOException e1) {
-				lastError = _("Error opening mailbox") + ": " + e1.getLocalizedMessage();
+				lastError = _t("Error opening mailbox") + ": " + e1.getLocalizedMessage();
 			}
 		}
 	}
@@ -748,7 +748,7 @@ public class POP3MailBox implements NewMailListener {
 			}
 		} else {
 			Debug.debug(Debug.DEBUG, "sendCmd1a: (" + cmd + ") NO RESPONSE");
-			lastError = _("No response from server");
+			lastError = _t("No response from server");
 			throw new IOException(lastError);
 		}
 		return result;
@@ -790,7 +790,7 @@ public class POP3MailBox implements NewMailListener {
 			String foo = DataHelper.readLine(in);
 			updateActivity();
 			if (foo == null) {
-				lastError = _("No response from server");
+				lastError = _t("No response from server");
 				throw new IOException(lastError);
 			}
 			sr.response = foo.trim();
@@ -1022,7 +1022,7 @@ public class POP3MailBox implements NewMailListener {
 			e = e.substring(5);
 		// translate this common error
 		if (e.trim().equals("Login failed."))
-			e = _("Login failed");
+			e = _t("Login failed");
 		return e;
 	}
 
@@ -1257,7 +1257,7 @@ public class POP3MailBox implements NewMailListener {
 	}
 
 	/** translate */
-	private static String _(String s) {
+	private static String _t(String s) {
 		return Messages.getString(s);
 	}
 }
diff --git a/apps/susimail/src/src/i2p/susi/webmail/smtp/SMTPClient.java b/apps/susimail/src/src/i2p/susi/webmail/smtp/SMTPClient.java
index f3f7556985..046dcbef52 100644
--- a/apps/susimail/src/src/i2p/susi/webmail/smtp/SMTPClient.java
+++ b/apps/susimail/src/src/i2p/susi/webmail/smtp/SMTPClient.java
@@ -211,7 +211,7 @@ public class SMTPClient {
 		try {
 			socket = new Socket( host, port );
 		} catch (Exception e) {
-			error += _("Cannot connect") + ": " + e.getMessage() + '\n';
+			error += _t("Cannot connect") + ": " + e.getMessage() + '\n';
 			ok = false;
 		}
 		try {
@@ -222,7 +222,7 @@ public class SMTPClient {
 				socket.setSoTimeout(120*1000);
 				int result = sendCmd(null);
 				if (result != 220) {
-					error += _("Server refused connection") + " (" + result +  ")\n";
+					error += _t("Server refused connection") + " (" + result +  ")\n";
 					ok = false;
 				}
 			}
@@ -234,7 +234,7 @@ public class SMTPClient {
 				if (r.result == 250) {
 					supportsPipelining = r.recv.contains("PIPELINING");
 				} else {
-					error += _("Server refused connection") + " (" + r.result +  ")\n";
+					error += _t("Server refused connection") + " (" + r.result +  ")\n";
 					ok = false;
 				}
 			}
@@ -246,7 +246,7 @@ public class SMTPClient {
 				cmds.add(new SendExpect(base64.encode(user), 334));
 				cmds.add(new SendExpect(base64.encode(pass), 235));
 				if (sendCmds(cmds) != 3) {
-					error += _("Login failed") + '\n';
+					error += _t("Login failed") + '\n';
 					ok = false;
 				}
 			}
@@ -259,7 +259,7 @@ public class SMTPClient {
 				cmds.add(new SendExpect("DATA", 354));
 				if (sendCmds(cmds) != cmds.size()) {
 					// TODO which recipient?
-					error += _("Mail rejected") + '\n';
+					error += _t("Mail rejected") + '\n';
 					ok = false;
 				}
 			}
@@ -273,10 +273,10 @@ public class SMTPClient {
 				if (result == 250)
 					mailSent = true;
 				else
-					error += _("Error sending mail") + " (" + result +  ")\n";
+					error += _t("Error sending mail") + " (" + result +  ")\n";
 			}
 		} catch (IOException e) {
-			error += _("Error sending mail") + ": " + e.getMessage() + '\n';
+			error += _t("Error sending mail") + ": " + e.getMessage() + '\n';
 
 		} catch (EncodingException e) {
 			error += e.getMessage();
@@ -324,7 +324,7 @@ public class SMTPClient {
 	}
 
 	/** translate */
-	private static String _(String s) {
+	private static String _t(String s) {
 		return Messages.getString(s);
 	}
 }
diff --git a/core/java/src/net/i2p/data/DataHelper.java b/core/java/src/net/i2p/data/DataHelper.java
index f35a6ddb63..352529a6e0 100644
--- a/core/java/src/net/i2p/data/DataHelper.java
+++ b/core/java/src/net/i2p/data/DataHelper.java
@@ -1546,7 +1546,7 @@ public class DataHelper {
             // years
             t = ngettext("1 year", "{0} years", (int) (ms / (365L * 24 * 60 * 60 * 1000)));
         } else {
-            return _("n/a");
+            return _t("n/a");
         }
         // Replace minus sign to work around
         // bug in Chrome (and IE?), line breaks at the minus sign
@@ -1593,7 +1593,7 @@ public class DataHelper {
             // years
             t = ngettext("1 year", "{0} years", (int) (ms / (365L * 24 * 60 * 60 * 1000)));
         } else {
-            return _("n/a");
+            return _t("n/a");
         }
         if (ms < 0)
             t = t.replace("-", "&minus;");
@@ -1602,7 +1602,7 @@ public class DataHelper {
     
     private static final String BUNDLE_NAME = "net.i2p.router.web.messages";
 
-    private static String _(String key) {
+    private static String _t(String key) {
         return Translate.getString(key, I2PAppContext.getGlobalContext(), BUNDLE_NAME);
     }
 
diff --git a/core/java/src/net/i2p/util/LogWriterBase.java b/core/java/src/net/i2p/util/LogWriterBase.java
index 053cccdc60..08683b6226 100644
--- a/core/java/src/net/i2p/util/LogWriterBase.java
+++ b/core/java/src/net/i2p/util/LogWriterBase.java
@@ -145,7 +145,7 @@ abstract class LogWriterBase implements Runnable {
     private String dupMessage(int dupCount, LogRecord lastRecord, boolean reverse) {
         String arrows = reverse ? "&darr;&darr;&darr;" : "^^^";
         return LogRecordFormatter.getWhen(_manager, lastRecord) + ' ' + arrows + ' ' +
-               _(dupCount, "1 similar message omitted", "{0} similar messages omitted") + ' ' + arrows + '\n';
+               _t(dupCount, "1 similar message omitted", "{0} similar messages omitted") + ' ' + arrows + '\n';
     }
     
     private static final String BUNDLE_NAME = "net.i2p.router.web.messages";
@@ -154,7 +154,7 @@ abstract class LogWriterBase implements Runnable {
      *  gettext
      *  @since 0.9.3
      */
-    private String _(int a, String b, String c) {
+    private String _t(int a, String b, String c) {
         return Translate.getString(a, b, c, _manager.getContext(), BUNDLE_NAME);
     }
 
diff --git a/core/java/src/net/i2p/util/Translate.java b/core/java/src/net/i2p/util/Translate.java
index d83036d02b..3b5ab1b535 100644
--- a/core/java/src/net/i2p/util/Translate.java
+++ b/core/java/src/net/i2p/util/Translate.java
@@ -65,7 +65,7 @@ public abstract class Translate {
      *    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"))
+     *    To tranlslate parameter also, use _t("foo {0} bar", _t("baz"))
      *    Do not double the single quotes in the parameter.
      *    Use autoboxing to call with ints, longs, floats, etc.
      */
diff --git a/history.txt b/history.txt
index b6097d90a4..2a0172d774 100644
--- a/history.txt
+++ b/history.txt
@@ -1,3 +1,6 @@
+2015-09-25 dg
+ * Rename _() for translation to _t() for Java 9 compatibility (ticket #1456)
+
 2015-09-20 dg
  * /configreseed: Add 'Reset URL list' button for revert to default hosts (ticket #1554, thanks dzirtt@gmail.com)
 
diff --git a/router/java/src/net/i2p/router/Blocklist.java b/router/java/src/net/i2p/router/Blocklist.java
index 4e931f6656..3ad8e73875 100644
--- a/router/java/src/net/i2p/router/Blocklist.java
+++ b/router/java/src/net/i2p/router/Blocklist.java
@@ -917,7 +917,7 @@ public class Blocklist {
         singles.addAll(_singleIPBlocklist);
         if (!(singles.isEmpty() && _singleIPv6Blocklist.isEmpty())) {
             out.write("<table><tr><th align=\"center\" colspan=\"2\"><b>");
-            out.write(_("IPs Banned Until Restart"));
+            out.write(_t("IPs Banned Until Restart"));
             out.write("</b></td></tr>");
             // first 0 - 127
             for (Integer ii : singles) {
@@ -954,11 +954,11 @@ public class Blocklist {
         }
         if (_blocklistSize > 0) {
             out.write("<table><tr><th align=\"center\" colspan=\"2\"><b>");
-            out.write(_("IPs Permanently Banned"));
+            out.write(_t("IPs Permanently Banned"));
             out.write("</b></th></tr><tr><td align=\"center\" width=\"50%\"><b>");
-            out.write(_("From"));
+            out.write(_t("From"));
             out.write("</b></td><td align=\"center\" width=\"50%\"><b>");
-            out.write(_("To"));
+            out.write(_t("To"));
             out.write("</b></td></tr>");
             int max = Math.min(_blocklistSize, MAX_DISPLAY);
             int displayed = 0;
@@ -994,7 +994,7 @@ public class Blocklist {
             out.write("</table>");
         } else {
             out.write("<br><i>");
-            out.write(_("none"));
+            out.write(_t("none"));
             out.write("</i>");
         }
         out.flush();
@@ -1030,7 +1030,7 @@ public class Blocklist {
     private static final String BUNDLE_NAME = "net.i2p.router.web.messages";
 
     /** translate */
-    private String _(String key) {
+    private String _t(String key) {
         return Translate.getString(key, _context, BUNDLE_NAME);
     }
 
diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java
index a6204817e3..f2522cd4ed 100644
--- a/router/java/src/net/i2p/router/RouterVersion.java
+++ b/router/java/src/net/i2p/router/RouterVersion.java
@@ -18,7 +18,7 @@ public class RouterVersion {
     /** deprecated */
     public final static String ID = "Monotone";
     public final static String VERSION = CoreVersion.VERSION;
-    public final static long BUILD = 8;
+    public final static long BUILD = 9;
 
     /** for example "-test" */
     public final static String EXTRA = "";
diff --git a/router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java b/router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java
index f619391ecb..bc7b1eeb1e 100644
--- a/router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java
+++ b/router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java
@@ -209,7 +209,7 @@ public class Reseeder {
             if (fetched <= 0)
                 throw new IOException("No seeds extracted");
             _checker.setStatus(
-                _("Reseeding: got router info from file ({0} successful, {1} errors).", fetched, errors));
+                _t("Reseeding: got router info from file ({0} successful, {1} errors).", fetched, errors));
             System.err.println("Reseed got " + fetched + " router infos from file with " + errors + " errors");
             _context.router().eventLog().addEvent(EventLog.RESEED, fetched + " from file");
             return fetched;
@@ -281,7 +281,7 @@ public class Reseeder {
         private void run2() {
             _isRunning = true;
             _checker.setError("");
-            _checker.setStatus(_("Reseeding"));
+            _checker.setStatus(_t("Reseeding"));
             if (_context.getBooleanProperty(PROP_PROXY_ENABLE)) {
                 _proxyHost = _context.getProperty(PROP_PROXY_HOST);
                 _proxyPort = _context.getProperty(PROP_PROXY_PORT, -1);
@@ -313,9 +313,9 @@ public class Reseeder {
                                        "and if nothing helps, read the FAQ about reseeding manually.");
                 } // else < 0, no valid URLs
                 String old = _checker.getError();
-                _checker.setError(_("Reseed failed.") + ' '  +
-                                  _("See {0} for help.",
-                                    "<a target=\"_top\" href=\"/configreseed\">" + _("reseed configuration page") + "</a>") +
+                _checker.setError(_t("Reseed failed.") + ' '  +
+                                  _t("See {0} for help.",
+                                    "<a target=\"_top\" href=\"/configreseed\">" + _t("reseed configuration page") + "</a>") +
                                   "<br>" + old);
             }
             _isRunning = false;
@@ -563,7 +563,7 @@ public class Reseeder {
             try {
                 // Don't use context clock as we may be adjusting the time
                 final long timeLimit = System.currentTimeMillis() + MAX_TIME_PER_HOST;
-                _checker.setStatus(_("Reseeding: fetching seed URL."));
+                _checker.setStatus(_t("Reseeding: fetching seed URL."));
                 System.err.println("Reseeding from " + seedURL);
                 byte contentRaw[] = readURL(seedURL);
                 if (contentRaw == null) {
@@ -620,7 +620,7 @@ public class Reseeder {
                      iter.hasNext() && fetched < 200 && System.currentTimeMillis() < timeLimit; ) {
                     try {
                         _checker.setStatus(
-                            _("Reseeding: fetching router info from seed URL ({0} successful, {1} errors).", fetched, errors));
+                            _t("Reseeding: fetching router info from seed URL ({0} successful, {1} errors).", fetched, errors));
 
                         if (!fetchSeed(seedURL.toString(), iter.next()))
                             continue;
@@ -694,7 +694,7 @@ public class Reseeder {
             int errors = 0;
             File contentRaw = null;
             try {
-                _checker.setStatus(_("Reseeding: fetching seed URL."));
+                _checker.setStatus(_t("Reseeding: fetching seed URL."));
                 System.err.println("Reseeding from " + seedURL);
                 // don't use context time, as we may be step-changing it
                 // from the server header
@@ -730,7 +730,7 @@ public class Reseeder {
                     contentRaw.delete();
             }
             _checker.setStatus(
-                _("Reseeding: fetching router info from seed URL ({0} successful, {1} errors).", fetched, errors));
+                _t("Reseeding: fetching router info from seed URL ({0} successful, {1} errors).", fetched, errors));
             System.err.println("Reseed got " + fetched + " router infos from " + seedURL + " with " + errors + " errors");
             return fetched;
         }
@@ -1002,17 +1002,17 @@ public class Reseeder {
     private static final String BUNDLE_NAME = "net.i2p.router.web.messages";
 
     /** translate */
-    private String _(String key) {
+    private String _t(String key) {
         return Translate.getString(key, _context, BUNDLE_NAME);
     }
 
     /** translate */
-    private String _(String s, Object o) {
+    private String _t(String s, Object o) {
         return Translate.getString(s, o, _context, BUNDLE_NAME);
     }
 
     /** translate */
-    private String _(String s, Object o, Object o2) {
+    private String _t(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/CommSystemFacadeImpl.java b/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java
index a9b8020607..fbea029908 100644
--- a/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java
+++ b/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java
@@ -499,7 +499,7 @@ public class CommSystemFacadeImpl extends CommSystemFacade {
         buf.append("<tt>");
         boolean found = _context.netDb().lookupRouterInfoLocally(peer) != null;
         if (found)
-            buf.append("<a title=\"").append(_("NetDb entry")).append("\" href=\"netdb?r=").append(h).append("\">");
+            buf.append("<a title=\"").append(_t("NetDb entry")).append("\" href=\"netdb?r=").append(h).append("\">");
         buf.append(h);
         if (found)
             buf.append("</a>");
@@ -519,7 +519,7 @@ public class CommSystemFacadeImpl extends CommSystemFacade {
     /**
      *  Translate
      */
-    private final String _(String s) {
+    private final String _t(String s) {
         return Translate.getString(s, _context, BUNDLE_NAME);
     }
 
diff --git a/router/java/src/net/i2p/router/transport/TransportImpl.java b/router/java/src/net/i2p/router/transport/TransportImpl.java
index ce2d643a6c..11fb08b96a 100644
--- a/router/java/src/net/i2p/router/transport/TransportImpl.java
+++ b/router/java/src/net/i2p/router/transport/TransportImpl.java
@@ -983,7 +983,7 @@ public abstract class TransportImpl implements Transport {
      *  Translate
      *  @since 0.9.8 moved from transports
      */
-    protected String _(String s) {
+    protected String _t(String s) {
         return Translate.getString(s, _context, BUNDLE_NAME);
     }
 
@@ -991,7 +991,7 @@ public abstract class TransportImpl implements Transport {
      *  Translate
      *  @since 0.9.8 moved from transports
      */
-    protected String _(String s, Object o) {
+    protected String _t(String s, Object o) {
         return Translate.getString(s, o, _context, BUNDLE_NAME);
     }
 
diff --git a/router/java/src/net/i2p/router/transport/TransportManager.java b/router/java/src/net/i2p/router/transport/TransportManager.java
index 4c0f325bbb..b49ff15514 100644
--- a/router/java/src/net/i2p/router/transport/TransportManager.java
+++ b/router/java/src/net/i2p/router/transport/TransportManager.java
@@ -671,9 +671,9 @@ public class TransportManager implements TransportEventListener {
     public void renderStatusHTML(Writer out, String urlBase, int sortFlags) throws IOException {
         if (_context.getBooleanProperty(PROP_ADVANCED)) {
             out.write("<p><b>");
-            out.write(_("Status"));
+            out.write(_t("Status"));
             out.write(": ");
-            out.write(_(getReachabilityStatus().toStatusString()));
+            out.write(_t(getReachabilityStatus().toStatusString()));
             out.write("</b></p>");
         }
         TreeMap<String, Transport> transports = new TreeMap<String, Transport>();
@@ -689,7 +689,7 @@ public class TransportManager implements TransportEventListener {
         }
 
         StringBuilder buf = new StringBuilder(4*1024);
-        buf.append("<h3>").append(_("Router Transport Addresses")).append("</h3><pre>\n");
+        buf.append("<h3>").append(_t("Router Transport Addresses")).append("</h3><pre>\n");
         for (Transport t : _transports.values()) {
             if (t.hasCurrentAddress()) {
                 for (RouterAddress ra : t.getCurrentAddresses()) {
@@ -697,7 +697,7 @@ public class TransportManager implements TransportEventListener {
                     buf.append("\n\n");
                 }
             } else {
-                buf.append(_("{0} is used for outbound connections only", t.getStyle()));
+                buf.append(_t("{0} is used for outbound connections only", t.getStyle()));
                 buf.append("\n\n");
             }
         }
@@ -708,7 +708,7 @@ public class TransportManager implements TransportEventListener {
         } else if (_upnpManager != null) {
             out.write(_upnpManager.renderStatusHTML());
         } else {
-            out.write("<h3><a name=\"upnp\"></a>" + _("UPnP is not enabled") + "</h3>\n");
+            out.write("<h3><a name=\"upnp\"></a>" + _t("UPnP is not enabled") + "</h3>\n");
         }
         out.write("</p>\n");
         out.flush();
@@ -717,38 +717,38 @@ public class TransportManager implements TransportEventListener {
 
     private final String getTransportsLegend() {
         StringBuilder buf = new StringBuilder(1024);
-        buf.append("<h3 id=\"help\">").append(_("Help")).append("</h3><div class=\"configure\"><p>")
-           .append(_("Your transport connection limits are automatically set based on your configured bandwidth."))
+        buf.append("<h3 id=\"help\">").append(_t("Help")).append("</h3><div class=\"configure\"><p>")
+           .append(_t("Your transport connection limits are automatically set based on your configured bandwidth."))
            .append('\n')
-           .append(_("To override these limits, add the settings i2np.ntcp.maxConnections=nnn and i2np.udp.maxConnections=nnn on the advanced configuration page."))
+           .append(_t("To override these limits, add the settings i2np.ntcp.maxConnections=nnn and i2np.udp.maxConnections=nnn on the advanced configuration page."))
            .append("</p></div>\n");
-        buf.append("<h3>").append(_("Definitions")).append("</h3><div class=\"configure\">" +
-                   "<p><b id=\"def.peer\">").append(_("Peer")).append("</b>: ").append(_("The remote peer, identified by router hash")).append("<br>\n" +
-                   "<b id=\"def.dir\">").append(_("Dir")).append("</b>: " +
-                   "<img alt=\"Inbound\" src=\"/themes/console/images/inbound.png\"> ").append(_("Inbound connection")).append("<br>\n" +
+        buf.append("<h3>").append(_t("Definitions")).append("</h3><div class=\"configure\">" +
+                   "<p><b id=\"def.peer\">").append(_t("Peer")).append("</b>: ").append(_t("The remote peer, identified by router hash")).append("<br>\n" +
+                   "<b id=\"def.dir\">").append(_t("Dir")).append("</b>: " +
+                   "<img alt=\"Inbound\" src=\"/themes/console/images/inbound.png\"> ").append(_t("Inbound connection")).append("<br>\n" +
                    "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" +
-                   "<img alt=\"Outbound\" src=\"/themes/console/images/outbound.png\"> ").append(_("Outbound connection")).append("<br>\n" +
+                   "<img alt=\"Outbound\" src=\"/themes/console/images/outbound.png\"> ").append(_t("Outbound connection")).append("<br>\n" +
                    "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" +
-                   "<img src=\"/themes/console/images/inbound.png\" alt=\"V\" height=\"8\" width=\"12\"> ").append(_("They offered to introduce us (help other peers traverse our firewall)")).append("<br>\n" +
+                   "<img src=\"/themes/console/images/inbound.png\" alt=\"V\" height=\"8\" width=\"12\"> ").append(_t("They offered to introduce us (help other peers traverse our firewall)")).append("<br>\n" +
                    "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" +
-                   "<img src=\"/themes/console/images/outbound.png\" alt=\"^\" height=\"8\" width=\"12\"> ").append(_("We offered to introduce them (help other peers traverse their firewall)")).append("<br>\n" +
-                   "<b id=\"def.idle\">").append(_("Idle")).append("</b>: ").append(_("How long since a packet has been received / sent")).append("<br>\n" +
-                   "<b id=\"def.rate\">").append(_("In/Out")).append("</b>: ").append(_("The smoothed inbound / outbound transfer rate (KBytes per second)")).append("<br>\n" +
-                   "<b id=\"def.up\">").append(_("Up")).append("</b>: ").append(_("How long ago this connection was established")).append("<br>\n" +
-                   "<b id=\"def.skew\">").append(_("Skew")).append("</b>: ").append(_("The difference between the peer's clock and your own")).append("<br>\n" +
-                   "<b id=\"def.cwnd\">CWND</b>: ").append(_("The congestion window, which is how many bytes can be sent without an acknowledgement")).append(" / <br>\n" +
-                   "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ").append(_("The number of sent messages awaiting acknowledgement")).append(" /<br>\n" +
-                   "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ").append(_("The maximum number of concurrent messages to send")).append(" /<br>\n"+
-                   "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ").append(_("The number of pending sends which exceed congestion window")).append("<br>\n" +
-                   "<b id=\"def.ssthresh\">SST</b>: ").append(_("The slow start threshold")).append("<br>\n" +
-                   "<b id=\"def.rtt\">RTT</b>: ").append(_("The round trip time in milliseconds")).append("<br>\n" +
-                   //"<b id=\"def.dev\">").append(_("Dev")).append("</b>: ").append(_("The standard deviation of the round trip time in milliseconds")).append("<br>\n" +
-                   "<b id=\"def.rto\">RTO</b>: ").append(_("The retransmit timeout in milliseconds")).append("<br>\n" +
-                   "<b id=\"def.mtu\">MTU</b>: ").append(_("Current maximum send packet size / estimated maximum receive packet size (bytes)")).append("<br>\n" +
-                   "<b id=\"def.send\">").append(_("TX")).append("</b>: ").append(_("The total number of packets sent to the peer")).append("<br>\n" +
-                   "<b id=\"def.recv\">").append(_("RX")).append("</b>: ").append(_("The total number of packets received from the peer")).append("<br>\n" +
-                   "<b id=\"def.resent\">").append(_("Dup TX")).append("</b>: ").append(_("The total number of packets retransmitted to the peer")).append("<br>\n" +
-                   "<b id=\"def.dupRecv\">").append(_("Dup RX")).append("</b>: ").append(_("The total number of duplicate packets received from the peer")).append("</p>" +
+                   "<img src=\"/themes/console/images/outbound.png\" alt=\"^\" height=\"8\" width=\"12\"> ").append(_t("We offered to introduce them (help other peers traverse their firewall)")).append("<br>\n" +
+                   "<b id=\"def.idle\">").append(_t("Idle")).append("</b>: ").append(_t("How long since a packet has been received / sent")).append("<br>\n" +
+                   "<b id=\"def.rate\">").append(_t("In/Out")).append("</b>: ").append(_t("The smoothed inbound / outbound transfer rate (KBytes per second)")).append("<br>\n" +
+                   "<b id=\"def.up\">").append(_t("Up")).append("</b>: ").append(_t("How long ago this connection was established")).append("<br>\n" +
+                   "<b id=\"def.skew\">").append(_t("Skew")).append("</b>: ").append(_t("The difference between the peer's clock and your own")).append("<br>\n" +
+                   "<b id=\"def.cwnd\">CWND</b>: ").append(_t("The congestion window, which is how many bytes can be sent without an acknowledgement")).append(" / <br>\n" +
+                   "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ").append(_t("The number of sent messages awaiting acknowledgement")).append(" /<br>\n" +
+                   "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ").append(_t("The maximum number of concurrent messages to send")).append(" /<br>\n"+
+                   "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ").append(_t("The number of pending sends which exceed congestion window")).append("<br>\n" +
+                   "<b id=\"def.ssthresh\">SST</b>: ").append(_t("The slow start threshold")).append("<br>\n" +
+                   "<b id=\"def.rtt\">RTT</b>: ").append(_t("The round trip time in milliseconds")).append("<br>\n" +
+                   //"<b id=\"def.dev\">").append(_t("Dev")).append("</b>: ").append(_t("The standard deviation of the round trip time in milliseconds")).append("<br>\n" +
+                   "<b id=\"def.rto\">RTO</b>: ").append(_t("The retransmit timeout in milliseconds")).append("<br>\n" +
+                   "<b id=\"def.mtu\">MTU</b>: ").append(_t("Current maximum send packet size / estimated maximum receive packet size (bytes)")).append("<br>\n" +
+                   "<b id=\"def.send\">").append(_t("TX")).append("</b>: ").append(_t("The total number of packets sent to the peer")).append("<br>\n" +
+                   "<b id=\"def.recv\">").append(_t("RX")).append("</b>: ").append(_t("The total number of packets received from the peer")).append("<br>\n" +
+                   "<b id=\"def.resent\">").append(_t("Dup TX")).append("</b>: ").append(_t("The total number of packets retransmitted to the peer")).append("<br>\n" +
+                   "<b id=\"def.dupRecv\">").append(_t("Dup RX")).append("</b>: ").append(_t("The total number of duplicate packets received from the peer")).append("</p>" +
                    "</div>\n");
         return buf.toString();
     }
@@ -770,14 +770,14 @@ public class TransportManager implements TransportEventListener {
     /**
      *  Translate
      */
-    private final String _(String s) {
+    private final String _t(String s) {
         return Translate.getString(s, _context, BUNDLE_NAME);
     }
 
     /**
      *  Translate
      */
-    private final String _(String s, Object o) {
+    private final String _t(String s, Object o) {
         return Translate.getString(s, o, _context, BUNDLE_NAME);
     }
 }
diff --git a/router/java/src/net/i2p/router/transport/UPnP.java b/router/java/src/net/i2p/router/transport/UPnP.java
index 29e0a037c0..baec7ab621 100644
--- a/router/java/src/net/i2p/router/transport/UPnP.java
+++ b/router/java/src/net/i2p/router/transport/UPnP.java
@@ -557,68 +557,68 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener {
 		for(int i=0; i<sl.size(); i++) {
 			Service serv = sl.getService(i);
 			if(serv == null) continue;
-			sb.append("<li>").append(_("Service")).append(": ");
+			sb.append("<li>").append(_t("Service")).append(": ");
 			// NOTE: Group all toString() of common actions together
 			// to avoid excess fetches, since toString() caches.
 			if("urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1".equals(serv.getServiceType())){
-				sb.append(_("WAN Common Interface Configuration"));
-				sb.append("<ul><li>").append(_("Status")).append(": ")
+				sb.append(_t("WAN Common Interface Configuration"));
+				sb.append("<ul><li>").append(_t("Status")).append(": ")
 				  .append(toString("GetCommonLinkProperties", "NewPhysicalLinkStatus", serv));
-				sb.append("<li>").append(_("Type")).append(": ")
+				sb.append("<li>").append(_t("Type")).append(": ")
 				  .append(toString("GetCommonLinkProperties", "NewWANAccessType", serv));
-				sb.append("<li>").append(_("Upstream")).append(": ")
+				sb.append("<li>").append(_t("Upstream")).append(": ")
 				  .append(toString("GetCommonLinkProperties", "NewLayer1UpstreamMaxBitRate", serv));
-				sb.append("<li>").append(_("Downstream")).append(": ")
+				sb.append("<li>").append(_t("Downstream")).append(": ")
 				  .append(toString("GetCommonLinkProperties", "NewLayer1DownstreamMaxBitRate", serv))
 				  .append("</li>");
 			}else if("urn:schemas-upnp-org:service:WANPPPConnection:1".equals(serv.getServiceType())){
-				sb.append(_("WAN PPP Connection"));
-				sb.append("<ul><li>").append(_("Status")).append(": ")
+				sb.append(_t("WAN PPP Connection"));
+				sb.append("<ul><li>").append(_t("Status")).append(": ")
 				  .append(toString("GetStatusInfo", "NewConnectionStatus", serv));
 				String up = toString("GetStatusInfo", "NewUptime", serv);
 				if (up != null) {
 					try {
 						long uptime = Long.parseLong(up);
 						uptime *= 1000;
-						sb.append("<li>").append(_("Uptime")).append(": ")
+						sb.append("<li>").append(_t("Uptime")).append(": ")
 						  .append(DataHelper.formatDuration2(uptime));
 					} catch (NumberFormatException nfe) {}
 				}
-				sb.append("<li>").append(_("Type")).append(": ")
+				sb.append("<li>").append(_t("Type")).append(": ")
 				  .append(toString("GetConnectionTypeInfo", "NewConnectionType", serv));
-				sb.append("<li>").append(_("Upstream")).append(": ")
+				sb.append("<li>").append(_t("Upstream")).append(": ")
 				  .append(toString("GetLinkLayerMaxBitRates", "NewUpstreamMaxBitRate", serv));
-				sb.append("<li>").append(_("Downstream")).append(": ")
+				sb.append("<li>").append(_t("Downstream")).append(": ")
 				  .append(toString("GetLinkLayerMaxBitRates", "NewDownstreamMaxBitRate", serv) + "<br>");
-				sb.append("<li>").append(_("External IP")).append(": ")
+				sb.append("<li>").append(_t("External IP")).append(": ")
 				  .append(toString("GetExternalIPAddress", "NewExternalIPAddress", serv))
 				  .append("</li>");
 			}else if("urn:schemas-upnp-org:service:Layer3Forwarding:1".equals(serv.getServiceType())){
-				sb.append(_("Layer 3 Forwarding"));
-				sb.append("<ul><li>").append(_("Default Connection Service")).append(": ")
+				sb.append(_t("Layer 3 Forwarding"));
+				sb.append("<ul><li>").append(_t("Default Connection Service")).append(": ")
 				  .append(toString("GetDefaultConnectionService", "NewDefaultConnectionService", serv))
 				  .append("</li>");
 			}else if(WAN_IP_CONNECTION.equals(serv.getServiceType())){
-				sb.append(_("WAN IP Connection"));
-				sb.append("<ul><li>").append(_("Status")).append(": ")
+				sb.append(_t("WAN IP Connection"));
+				sb.append("<ul><li>").append(_t("Status")).append(": ")
 				  .append(toString("GetStatusInfo", "NewConnectionStatus", serv));
 				String up = toString("GetStatusInfo", "NewUptime", serv);
 				if (up != null) {
 					try {
 						long uptime = Long.parseLong(up);
 						uptime *= 1000;
-						sb.append("<li>").append(_("Uptime")).append(": ")
+						sb.append("<li>").append(_t("Uptime")).append(": ")
 						  .append(DataHelper.formatDuration2(uptime));
 					} catch (NumberFormatException nfe) {}
 				}
-				sb.append("<li>").append(_("Type")).append(": ")
+				sb.append("<li>").append(_t("Type")).append(": ")
 				  .append(toString("GetConnectionTypeInfo", "NewConnectionType", serv));
-				sb.append("<li>").append(_("External IP")).append(": ")
+				sb.append("<li>").append(_t("External IP")).append(": ")
 				  .append(toString("GetExternalIPAddress", "NewExternalIPAddress", serv))
 				  .append("</li>");
 			}else if("urn:schemas-upnp-org:service:WANEthernetLinkConfig:1".equals(serv.getServiceType())){
-				sb.append(_("WAN Ethernet Link Configuration"));
-				sb.append("<ul><li>").append(_("Status")).append(": ")
+				sb.append(_t("WAN Ethernet Link Configuration"));
+				sb.append("<ul><li>").append(_t("Status")).append(": ")
 				  .append(toString("GetEthernetLinkStatus", "NewEthernetLinkStatus", serv))
 				  .append("</li>");
 			} else {
@@ -638,9 +638,9 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener {
 	
 	private void listSubDev(String prefix, Device dev, StringBuilder sb){
                 if (prefix == null)
-			sb.append("<p>").append(_("Found Device")).append(": ");
+			sb.append("<p>").append(_t("Found Device")).append(": ");
 		else
-			sb.append("<li>").append(_("Subdevice")).append(": ");
+			sb.append("<li>").append(_t("Subdevice")).append(": ");
 		sb.append(DataHelper.escapeHTML(dev.getFriendlyName()));
                 if (prefix == null)
 			sb.append("</p>");
@@ -661,11 +661,11 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener {
 	/** warning - slow */
 	public String renderStatusHTML() {
 		final StringBuilder sb = new StringBuilder();
-		sb.append("<h3><a name=\"upnp\"></a>").append(_("UPnP Status")).append("</h3>");
+		sb.append("<h3><a name=\"upnp\"></a>").append(_t("UPnP Status")).append("</h3>");
 		
 		synchronized(_otherUDNs) {
 			if (!_otherUDNs.isEmpty()) {
-				sb.append(_("Disabled UPnP Devices"));
+				sb.append(_t("Disabled UPnP Devices"));
 				sb.append("<ul>");
 				for (Map.Entry<String, String> e : _otherUDNs.entrySet()) {
 					String udn = e.getKey();
@@ -679,10 +679,10 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener {
 		}
 
 		if(isDisabled) {
-			sb.append(_("UPnP has been disabled; Do you have more than one UPnP Internet Gateway Device on your LAN ?"));
+			sb.append(_t("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(_t("UPnP has not found any UPnP-aware, compatible device on your LAN."));
 			return sb.toString();
 		}
 		
@@ -690,15 +690,15 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener {
 		String addr = getNATAddress();
 		sb.append("<p>");
 		if (addr != null)
-		    sb.append(_("The current external IP address reported by UPnP is {0}", DataHelper.escapeHTML(addr)));
+		    sb.append(_t("The current external IP address reported by UPnP is {0}", DataHelper.escapeHTML(addr)));
 		else
-		    sb.append(_("The current external IP address is not available."));
+		    sb.append(_t("The current external IP address is not available."));
 		int downstreamMaxBitRate = getDownstreamMaxBitRate();
 		int upstreamMaxBitRate = getUpstreamMaxBitRate();
 		if(downstreamMaxBitRate > 0)
-			sb.append("<br>").append(_("UPnP reports the maximum downstream bit rate is {0}bits/sec", DataHelper.formatSize2(downstreamMaxBitRate)));
+			sb.append("<br>").append(_t("UPnP reports the maximum downstream bit rate is {0}bits/sec", DataHelper.formatSize2(downstreamMaxBitRate)));
 		if(upstreamMaxBitRate > 0)
-			sb.append("<br>").append(_("UPnP reports the maximum upstream bit rate is {0}bits/sec", DataHelper.formatSize2(upstreamMaxBitRate)));
+			sb.append("<br>").append(_t("UPnP reports the maximum upstream bit rate is {0}bits/sec", DataHelper.formatSize2(upstreamMaxBitRate)));
 		synchronized(lock) {
 			for(ForwardPort port : portsToForward) {
 				sb.append("<br>");
@@ -706,9 +706,9 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener {
 					// {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));
+					sb.append(_t("{0} port {1,number,#####} was successfully forwarded by UPnP.", protoToString(port.protocol), port.portNumber));
 				else
-					sb.append(_("{0} port {1,number,#####} was not forwarded by UPnP.", protoToString(port.protocol), port.portNumber));
+					sb.append(_t("{0} port {1,number,#####} was not forwarded by UPnP.", protoToString(port.protocol), port.portNumber));
 			}
 		}
 		
@@ -1101,21 +1101,21 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener {
     /**
      *  Translate
      */
-    private final String _(String s) {
+    private final String _t(String s) {
         return Translate.getString(s, _context, BUNDLE_NAME);
     }
 
     /**
      *  Translate
      */
-    private final String _(String s, Object o) {
+    private final String _t(String s, Object o) {
         return Translate.getString(s, o, _context, BUNDLE_NAME);
     }
 
     /**
      *  Translate
      */
-    private final String _(String s, Object o, Object o2) {
+    private final String _t(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 0ff6d5d848..370ba813e8 100644
--- a/router/java/src/net/i2p/router/transport/UPnPManager.java
+++ b/router/java/src/net/i2p/router/transport/UPnPManager.java
@@ -280,7 +280,7 @@ class UPnPManager {
      */
     public String renderStatusHTML() {
         if (!_isRunning)
-            return "<h3><a name=\"upnp\"></a>" + _("UPnP is not enabled") + "</h3>\n";
+            return "<h3><a name=\"upnp\"></a>" + _t("UPnP is not enabled") + "</h3>\n";
         return _upnp.renderStatusHTML();
     }
 
@@ -289,7 +289,7 @@ class UPnPManager {
     /**
      *  Translate
      */
-    private final String _(String s) {
+    private final String _t(String s) {
         return Translate.getString(s, _context, BUNDLE_NAME);
     }
 
diff --git a/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java b/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java
index 382d4d89e4..c38e932d5b 100644
--- a/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java
+++ b/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java
@@ -1341,26 +1341,26 @@ public class NTCPTransport extends TransportImpl {
         }
 
         StringBuilder buf = new StringBuilder(512);
-        buf.append("<h3 id=\"ntcpcon\">").append(_("NTCP connections")).append(": ").append(peers.size());
-        buf.append(". ").append(_("Limit")).append(": ").append(getMaxConnections());
-        buf.append(". ").append(_("Timeout")).append(": ").append(DataHelper.formatDuration2(_pumper.getIdleTimeout()));
+        buf.append("<h3 id=\"ntcpcon\">").append(_t("NTCP connections")).append(": ").append(peers.size());
+        buf.append(". ").append(_t("Limit")).append(": ").append(getMaxConnections());
+        buf.append(". ").append(_t("Timeout")).append(": ").append(DataHelper.formatDuration2(_pumper.getIdleTimeout()));
         if (_context.getBooleanProperty(PROP_ADVANCED)) {
-            buf.append(". ").append(_("Status")).append(": ").append(_(getReachabilityStatus().toStatusString()));
+            buf.append(". ").append(_t("Status")).append(": ").append(_t(getReachabilityStatus().toStatusString()));
         }
         buf.append(".</h3>\n" +
                    "<table>\n" +
-                   "<tr><th><a href=\"#def.peer\">").append(_("Peer")).append("</a></th>" +
-                   "<th>").append(_("Dir")).append("</th>" +
-                   "<th>").append(_("IPv6")).append("</th>" +
-                   "<th align=\"right\"><a href=\"#def.idle\">").append(_("Idle")).append("</a></th>" +
-                   "<th align=\"right\"><a href=\"#def.rate\">").append(_("In/Out")).append("</a></th>" +
-                   "<th align=\"right\"><a href=\"#def.up\">").append(_("Up")).append("</a></th>" +
-                   "<th align=\"right\"><a href=\"#def.skew\">").append(_("Skew")).append("</a></th>" +
-                   "<th align=\"right\"><a href=\"#def.send\">").append(_("TX")).append("</a></th>" +
-                   "<th align=\"right\"><a href=\"#def.recv\">").append(_("RX")).append("</a></th>" +
-                   "<th>").append(_("Out Queue")).append("</th>" +
-                   "<th>").append(_("Backlogged?")).append("</th>" +
-                   //"<th>").append(_("Reading?")).append("</th>" +
+                   "<tr><th><a href=\"#def.peer\">").append(_t("Peer")).append("</a></th>" +
+                   "<th>").append(_t("Dir")).append("</th>" +
+                   "<th>").append(_t("IPv6")).append("</th>" +
+                   "<th align=\"right\"><a href=\"#def.idle\">").append(_t("Idle")).append("</a></th>" +
+                   "<th align=\"right\"><a href=\"#def.rate\">").append(_t("In/Out")).append("</a></th>" +
+                   "<th align=\"right\"><a href=\"#def.up\">").append(_t("Up")).append("</a></th>" +
+                   "<th align=\"right\"><a href=\"#def.skew\">").append(_t("Skew")).append("</a></th>" +
+                   "<th align=\"right\"><a href=\"#def.send\">").append(_t("TX")).append("</a></th>" +
+                   "<th align=\"right\"><a href=\"#def.recv\">").append(_t("RX")).append("</a></th>" +
+                   "<th>").append(_t("Out Queue")).append("</th>" +
+                   "<th>").append(_t("Backlogged?")).append("</th>" +
+                   //"<th>").append(_t("Reading?")).append("</th>" +
                    " </tr>\n");
         out.write(buf.toString());
         buf.setLength(0);
@@ -1372,9 +1372,9 @@ public class NTCPTransport extends TransportImpl {
             //    buf.append(' ').append(_context.blocklist().toStr(ip));
             buf.append("</td><td class=\"cells\" align=\"center\">");
             if (con.isInbound())
-                buf.append("<img src=\"/themes/console/images/inbound.png\" alt=\"Inbound\" title=\"").append(_("Inbound")).append("\"/>");
+                buf.append("<img src=\"/themes/console/images/inbound.png\" alt=\"Inbound\" title=\"").append(_t("Inbound")).append("\"/>");
             else
-                buf.append("<img src=\"/themes/console/images/outbound.png\" alt=\"Outbound\" title=\"").append(_("Outbound")).append("\"/>");
+                buf.append("<img src=\"/themes/console/images/outbound.png\" alt=\"Outbound\" title=\"").append(_t("Outbound")).append("\"/>");
             buf.append("</td><td class=\"cells\" align=\"center\">");
             if (con.isIPv6())
                 buf.append("&#x2713;");
diff --git a/router/java/src/net/i2p/router/transport/udp/UDPTransport.java b/router/java/src/net/i2p/router/transport/udp/UDPTransport.java
index d109cb0991..223f655f5a 100644
--- a/router/java/src/net/i2p/router/transport/udp/UDPTransport.java
+++ b/router/java/src/net/i2p/router/transport/udp/UDPTransport.java
@@ -2465,58 +2465,58 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
         int numPeers = 0;
         
         StringBuilder buf = new StringBuilder(512);
-        buf.append("<h3 id=\"udpcon\">").append(_("UDP connections")).append(": ").append(peers.size());
-        buf.append(". ").append(_("Limit")).append(": ").append(getMaxConnections());
-        buf.append(". ").append(_("Timeout")).append(": ").append(DataHelper.formatDuration2(_expireTimeout));
+        buf.append("<h3 id=\"udpcon\">").append(_t("UDP connections")).append(": ").append(peers.size());
+        buf.append(". ").append(_t("Limit")).append(": ").append(getMaxConnections());
+        buf.append(". ").append(_t("Timeout")).append(": ").append(DataHelper.formatDuration2(_expireTimeout));
         if (_context.getBooleanProperty(PROP_ADVANCED)) {
-            buf.append(". ").append(_("Status")).append(": ").append(_(_reachabilityStatus.toStatusString()));
+            buf.append(". ").append(_t("Status")).append(": ").append(_t(_reachabilityStatus.toStatusString()));
         }
         buf.append(".</h3>\n");
         buf.append("<table>\n");
-        buf.append("<tr><th class=\"smallhead\" nowrap><a href=\"#def.peer\">").append(_("Peer")).append("</a><br>");
+        buf.append("<tr><th class=\"smallhead\" nowrap><a href=\"#def.peer\">").append(_t("Peer")).append("</a><br>");
         if (sortFlags != FLAG_ALPHA)
-            appendSortLinks(buf, urlBase, sortFlags, _("Sort by peer hash"), FLAG_ALPHA);
+            appendSortLinks(buf, urlBase, sortFlags, _t("Sort by peer hash"), FLAG_ALPHA);
         buf.append("</th><th class=\"smallhead\" nowrap><a href=\"#def.dir\" title=\"")
-           .append(_("Direction/Introduction")).append("\">").append(_("Dir"))
-           .append("</a></th><th class=\"smallhead\" nowrap><a href=\"#def.ipv6\">").append(_("IPv6"))
-           .append("</a></th><th class=\"smallhead\" nowrap><a href=\"#def.idle\">").append(_("Idle")).append("</a><br>");
-        appendSortLinks(buf, urlBase, sortFlags, _("Sort by idle inbound"), FLAG_IDLE_IN);
+           .append(_t("Direction/Introduction")).append("\">").append(_t("Dir"))
+           .append("</a></th><th class=\"smallhead\" nowrap><a href=\"#def.ipv6\">").append(_t("IPv6"))
+           .append("</a></th><th class=\"smallhead\" nowrap><a href=\"#def.idle\">").append(_t("Idle")).append("</a><br>");
+        appendSortLinks(buf, urlBase, sortFlags, _t("Sort by idle inbound"), FLAG_IDLE_IN);
         buf.append(" / ");
-        appendSortLinks(buf, urlBase, sortFlags, _("Sort by idle outbound"), FLAG_IDLE_OUT);
+        appendSortLinks(buf, urlBase, sortFlags, _t("Sort by idle outbound"), FLAG_IDLE_OUT);
         buf.append("</th>");
-        buf.append("<th class=\"smallhead\" nowrap><a href=\"#def.rate\">").append(_("In/Out")).append("</a><br>");
-        appendSortLinks(buf, urlBase, sortFlags, _("Sort by inbound rate"), FLAG_RATE_IN);
+        buf.append("<th class=\"smallhead\" nowrap><a href=\"#def.rate\">").append(_t("In/Out")).append("</a><br>");
+        appendSortLinks(buf, urlBase, sortFlags, _t("Sort by inbound rate"), FLAG_RATE_IN);
         buf.append(" / ");
-        appendSortLinks(buf, urlBase, sortFlags, _("Sort by outbound rate"), FLAG_RATE_OUT);
+        appendSortLinks(buf, urlBase, sortFlags, _t("Sort by outbound rate"), FLAG_RATE_OUT);
         buf.append("</th>\n");
-        buf.append("<th class=\"smallhead\" nowrap><a href=\"#def.up\">").append(_("Up")).append("</a><br>");
-        appendSortLinks(buf, urlBase, sortFlags, _("Sort by connection uptime"), FLAG_UPTIME);
-        buf.append("</th><th class=\"smallhead\" nowrap><a href=\"#def.skew\">").append(_("Skew")).append("</a><br>");
-        appendSortLinks(buf, urlBase, sortFlags, _("Sort by clock skew"), FLAG_SKEW);
+        buf.append("<th class=\"smallhead\" nowrap><a href=\"#def.up\">").append(_t("Up")).append("</a><br>");
+        appendSortLinks(buf, urlBase, sortFlags, _t("Sort by connection uptime"), FLAG_UPTIME);
+        buf.append("</th><th class=\"smallhead\" nowrap><a href=\"#def.skew\">").append(_t("Skew")).append("</a><br>");
+        appendSortLinks(buf, urlBase, sortFlags, _t("Sort by clock skew"), FLAG_SKEW);
         buf.append("</th>\n");
         buf.append("<th class=\"smallhead\" nowrap><a href=\"#def.cwnd\">CWND</a><br>");
-        appendSortLinks(buf, urlBase, sortFlags, _("Sort by congestion window"), FLAG_CWND);
+        appendSortLinks(buf, urlBase, sortFlags, _t("Sort by congestion window"), FLAG_CWND);
         buf.append("</th><th class=\"smallhead\" nowrap><a href=\"#def.ssthresh\">SST</a><br>");
-        appendSortLinks(buf, urlBase, sortFlags, _("Sort by slow start threshold"), FLAG_SSTHRESH);
+        appendSortLinks(buf, urlBase, sortFlags, _t("Sort by slow start threshold"), FLAG_SSTHRESH);
         buf.append("</th>\n");
         buf.append("<th class=\"smallhead\" nowrap><a href=\"#def.rtt\">RTT</a><br>");
-        appendSortLinks(buf, urlBase, sortFlags, _("Sort by round trip time"), FLAG_RTT);
-        //buf.append("</th><th class=\"smallhead\" nowrap><a href=\"#def.dev\">").append(_("Dev")).append("</a><br>");
-        //appendSortLinks(buf, urlBase, sortFlags, _("Sort by round trip time deviation"), FLAG_DEV);
+        appendSortLinks(buf, urlBase, sortFlags, _t("Sort by round trip time"), FLAG_RTT);
+        //buf.append("</th><th class=\"smallhead\" nowrap><a href=\"#def.dev\">").append(_t("Dev")).append("</a><br>");
+        //appendSortLinks(buf, urlBase, sortFlags, _t("Sort by round trip time deviation"), FLAG_DEV);
         buf.append("</th><th class=\"smallhead\" nowrap><a href=\"#def.rto\">RTO</a><br>");
-        appendSortLinks(buf, urlBase, sortFlags, _("Sort by retransmission timeout"), FLAG_RTO);
+        appendSortLinks(buf, urlBase, sortFlags, _t("Sort by retransmission timeout"), FLAG_RTO);
         buf.append("</th>\n");
         buf.append("<th class=\"smallhead\" nowrap><a href=\"#def.mtu\">MTU</a><br>");
-        appendSortLinks(buf, urlBase, sortFlags, _("Sort by outbound maximum transmit unit"), FLAG_MTU);
-        buf.append("</th><th class=\"smallhead\" nowrap><a href=\"#def.send\">").append(_("TX")).append("</a><br>");
-        appendSortLinks(buf, urlBase, sortFlags, _("Sort by packets sent"), FLAG_SEND);
-        buf.append("</th><th class=\"smallhead\" nowrap><a href=\"#def.recv\">").append(_("RX")).append("</a><br>");
-        appendSortLinks(buf, urlBase, sortFlags, _("Sort by packets received"), FLAG_RECV);
+        appendSortLinks(buf, urlBase, sortFlags, _t("Sort by outbound maximum transmit unit"), FLAG_MTU);
+        buf.append("</th><th class=\"smallhead\" nowrap><a href=\"#def.send\">").append(_t("TX")).append("</a><br>");
+        appendSortLinks(buf, urlBase, sortFlags, _t("Sort by packets sent"), FLAG_SEND);
+        buf.append("</th><th class=\"smallhead\" nowrap><a href=\"#def.recv\">").append(_t("RX")).append("</a><br>");
+        appendSortLinks(buf, urlBase, sortFlags, _t("Sort by packets received"), FLAG_RECV);
         buf.append("</th>\n");
-        buf.append("<th class=\"smallhead\" nowrap><a href=\"#def.resent\">").append(_("Dup TX")).append("</a><br>");
-        appendSortLinks(buf, urlBase, sortFlags, _("Sort by packets retransmitted"), FLAG_RESEND);
-        buf.append("</th><th class=\"smallhead\" nowrap><a href=\"#def.dupRecv\">").append(_("Dup RX")).append("</a><br>");
-        appendSortLinks(buf, urlBase, sortFlags, _("Sort by packets received more than once"), FLAG_DUP);
+        buf.append("<th class=\"smallhead\" nowrap><a href=\"#def.resent\">").append(_t("Dup TX")).append("</a><br>");
+        appendSortLinks(buf, urlBase, sortFlags, _t("Sort by packets retransmitted"), FLAG_RESEND);
+        buf.append("</th><th class=\"smallhead\" nowrap><a href=\"#def.dupRecv\">").append(_t("Dup RX")).append("</a><br>");
+        appendSortLinks(buf, urlBase, sortFlags, _t("Sort by packets received more than once"), FLAG_DUP);
         buf.append("</th></tr>\n");
         out.write(buf.toString());
         buf.setLength(0);
@@ -2532,17 +2532,17 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
             //    buf.append(' ').append(_context.blocklist().toStr(ip));
             buf.append("</td><td class=\"cells\" nowrap align=\"left\">");
             if (peer.isInbound())
-                buf.append("<img src=\"/themes/console/images/inbound.png\" alt=\"Inbound\" title=\"").append(_("Inbound")).append("\">");
+                buf.append("<img src=\"/themes/console/images/inbound.png\" alt=\"Inbound\" title=\"").append(_t("Inbound")).append("\">");
             else
-                buf.append("<img src=\"/themes/console/images/outbound.png\" alt=\"Outbound\" title=\"").append(_("Outbound")).append("\">");
+                buf.append("<img src=\"/themes/console/images/outbound.png\" alt=\"Outbound\" title=\"").append(_t("Outbound")).append("\">");
             if (peer.getWeRelayToThemAs() > 0)
-                buf.append("&nbsp;&nbsp;<img src=\"/themes/console/images/outbound.png\" height=\"8\" width=\"12\" alt=\"^\" title=\"").append(_("We offered to introduce them")).append("\">");
+                buf.append("&nbsp;&nbsp;<img src=\"/themes/console/images/outbound.png\" height=\"8\" width=\"12\" alt=\"^\" title=\"").append(_t("We offered to introduce them")).append("\">");
             if (peer.getTheyRelayToUsAs() > 0)
-                buf.append("&nbsp;&nbsp;<img src=\"/themes/console/images/inbound.png\" height=\"8\" width=\"12\" alt=\"V\" title=\"").append(_("They offered to introduce us")).append("\">");
+                buf.append("&nbsp;&nbsp;<img src=\"/themes/console/images/inbound.png\" height=\"8\" width=\"12\" alt=\"V\" title=\"").append(_t("They offered to introduce us")).append("\">");
             
             boolean appended = false;
             if (_activeThrottle.isChoked(peer.getRemotePeer())) {
-                buf.append("<br><i>").append(_("Choked")).append("</i>");
+                buf.append("<br><i>").append(_t("Choked")).append("</i>");
                 appended = true;
             }
             int cfs = peer.getConsecutiveFailedSends();
@@ -2550,15 +2550,15 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
                 if (!appended) buf.append("<br>");
                 buf.append(" <i>");
                 if (cfs == 1)
-                    buf.append(_("1 fail"));
+                    buf.append(_t("1 fail"));
                 else
-                    buf.append(_("{0} fails", cfs));
+                    buf.append(_t("{0} fails", cfs));
                 buf.append("</i>");
                 appended = true;
             }
             if (_context.banlist().isBanlisted(peer.getRemotePeer(), STYLE)) {
                 if (!appended) buf.append("<br>");
-                buf.append(" <i>").append(_("Banned")).append("</i>");
+                buf.append(" <i>").append(_t("Banned")).append("</i>");
                 appended = true;
             }
             //byte[] ip = getIP(peer.getRemotePeer());
@@ -2617,7 +2617,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
             buf.append(THINSP).append(peer.getConcurrentSendWindow());
             buf.append(THINSP).append(peer.getConsecutiveSendRejections());
             if (peer.isBacklogged())
-                buf.append(' ').append(_("backlogged"));
+                buf.append(' ').append(_t("backlogged"));
             buf.append("</td>");
 
             buf.append("<td class=\"cells\" align=\"right\">");
@@ -2949,7 +2949,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
                           " from: ", new Exception("traceback"));
             if (old != Status.UNKNOWN)
                 _context.router().eventLog().addEvent(EventLog.REACHABILITY,
-                   "from " + _(old.toStatusString()) + " to " +  _(status.toStatusString()));
+                   "from " + _t(old.toStatusString()) + " to " +  _t(status.toStatusString()));
             // Always rebuild when the status changes, even if our address hasn't changed,
             // as rebuildExternalAddress() calls replaceAddress() which calls CSFI.notifyReplaceAddress()
             // which will start up NTCP inbound when we transition to OK.
-- 
GitLab