diff --git a/LICENSE.txt b/LICENSE.txt index f3345857e..bbc5423d4 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -207,6 +207,9 @@ The following applications and libraries are not used or bundled in binary packages, therefore the licenses are not included in binary distributions. See the source package for the additional license information. + Admin Manager: + Public domain + Atalk: Public domain diff --git a/apps/BOB/src/net/i2p/BOB/BOB.java b/apps/BOB/src/net/i2p/BOB/BOB.java index ee3f5937a..2c689f65d 100644 --- a/apps/BOB/src/net/i2p/BOB/BOB.java +++ b/apps/BOB/src/net/i2p/BOB/BOB.java @@ -256,11 +256,13 @@ public class BOB { listener = new ServerSocket(Integer.parseInt(props.getProperty(PROP_BOB_PORT)), 10, InetAddress.getByName(props.getProperty(PROP_BOB_HOST))); Socket server = null; listener.setSoTimeout(500); // .5 sec + while (spin.get()) { //DoCMDS connection; try { server = listener.accept(); + server.setKeepAlive(true); g = true; } catch (ConnectException ce) { g = false; diff --git a/apps/BOB/src/net/i2p/BOB/DoCMDS.java b/apps/BOB/src/net/i2p/BOB/DoCMDS.java index dcb0a195d..2a149522b 100644 --- a/apps/BOB/src/net/i2p/BOB/DoCMDS.java +++ b/apps/BOB/src/net/i2p/BOB/DoCMDS.java @@ -691,6 +691,7 @@ public class DoCMDS implements Runnable { try { prikey = new ByteArrayOutputStream(); prikey.write(net.i2p.data.Base64.decode(Arg)); + d = new Destination(); d.fromBase64(Arg); } catch (Exception ex) { Arg = ""; diff --git a/apps/BOB/src/net/i2p/BOB/I2PtoTCP.java b/apps/BOB/src/net/i2p/BOB/I2PtoTCP.java index 85dcf5b41..4c186700f 100644 --- a/apps/BOB/src/net/i2p/BOB/I2PtoTCP.java +++ b/apps/BOB/src/net/i2p/BOB/I2PtoTCP.java @@ -102,6 +102,7 @@ public class I2PtoTCP implements Runnable { break die; } sock = new Socket(host, port); + sock.setKeepAlive(true); // make readers/writers in = sock.getInputStream(); out = sock.getOutputStream(); diff --git a/apps/BOB/src/net/i2p/BOB/TCPlistener.java b/apps/BOB/src/net/i2p/BOB/TCPlistener.java index 714ee1e7f..154e2a4d1 100644 --- a/apps/BOB/src/net/i2p/BOB/TCPlistener.java +++ b/apps/BOB/src/net/i2p/BOB/TCPlistener.java @@ -78,6 +78,7 @@ public class TCPlistener implements Runnable { while (lives.get()) { try { server = listener.accept(); + server.setKeepAlive(true); g = true; } catch (SocketTimeoutException ste) { g = false; diff --git a/apps/BOB/src/net/i2p/BOB/TCPtoI2P.java b/apps/BOB/src/net/i2p/BOB/TCPtoI2P.java index a4a851c54..a537d942f 100644 --- a/apps/BOB/src/net/i2p/BOB/TCPtoI2P.java +++ b/apps/BOB/src/net/i2p/BOB/TCPtoI2P.java @@ -146,8 +146,14 @@ public class TCPtoI2P implements Runnable { input = line.toLowerCase(); Destination dest = null; if (input.endsWith(".i2p")) { - dest = I2PTunnel.destFromName(input); - line = dest.toBase64(); + try { + dest = I2PTunnel.destFromName(input); + line = dest.toBase64(); + } catch (NullPointerException npe) { + // Could not find the destination!? + Emsg("Can't find destination: " + input, out); + return; + } } dest = new Destination(); dest.fromBase64(line); diff --git a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java index 655282922..51c9373b0 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java +++ b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java @@ -561,7 +561,7 @@ public class SnarkManager implements Snark.CompleteListener { if ( (files != null) && (files.size() > MAX_FILES_PER_TORRENT) ) { return _("Too many files in \"{0}\" ({1}), deleting it!", info.getName(), files.size()); } else if ( (files == null) && (info.getName().endsWith(".torrent")) ) { - return _("Torrent file \"{0}\" cannot end in '.torrent', deleting it!", info.getName()); + return _("Torrent file \"{0}\" cannot end in \".torrent\", deleting it!", info.getName()); } else if (info.getPieces() <= 0) { return _("No pieces in \"{0}\", deleting it!", info.getName()); } else if (info.getPieces() > Storage.MAX_PIECES) { diff --git a/apps/i2psnark/jetty-i2psnark.xml b/apps/i2psnark/jetty-i2psnark.xml index 0d4c56112..b5d6d1ef8 100644 --- a/apps/i2psnark/jetty-i2psnark.xml +++ b/apps/i2psnark/jetty-i2psnark.xml @@ -58,6 +58,23 @@ webapps/i2psnark.war + + + + + /themes + ./docs/themes + + + + FALSE + + + + + + + diff --git a/apps/i2psnark/locale/messages_ru.po b/apps/i2psnark/locale/messages_ru.po index 3e7ab41b1..c21a81526 100644 --- a/apps/i2psnark/locale/messages_ru.po +++ b/apps/i2psnark/locale/messages_ru.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: I2P i2psnark\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-14 03:19+0000\n" -"PO-Revision-Date: 2009-12-20 07:03+0000\n" +"POT-Creation-Date: 2010-01-14 06:24+0000\n" +"PO-Revision-Date: 2010-01-14 06:33+0000\n" "Last-Translator: 4get \n" "Language-Team: foo \n" "MIME-Version: 1.0\n" @@ -141,8 +141,8 @@ msgstr "Слишком много файлов в торренте \"{0}\" ({1}) #: ../java/src/org/klomp/snark/SnarkManager.java:564 #, java-format -msgid "Torrent file \"{0}\" cannot end in '.torrent', deleting it!" -msgstr "Торрент \"{0}\" содержит единственный файл заканчивающийся на '.torrent', удаляем его!" +msgid "Torrent file \"{0}\" cannot end in \".torrent\", deleting it!" +msgstr "Торрент \"{0}\" содержит единственный файл заканчивающийся на \".torrent\", удаляем его!" #: ../java/src/org/klomp/snark/SnarkManager.java:566 #, java-format @@ -291,13 +291,13 @@ msgid "Torrent file {0} does not exist" msgstr "Торрент {0} не существует" #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:237 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:986 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:990 #, java-format msgid "Torrent already running: {0}" msgstr "Торрент уже запущен: {0}" #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:239 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:988 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:992 #, java-format msgid "Torrent already in the queue: {0}" msgstr "Торрент уже в очереди: {0}" @@ -414,7 +414,7 @@ msgstr "ОшибкаТрекера" #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:530 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:534 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:536 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:859 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:862 msgid "peers" msgstr "пир." @@ -454,7 +454,7 @@ msgid "Open file" msgstr "Открыть файл" #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:579 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:779 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:781 msgid "Tracker" msgstr "Трекер" @@ -514,134 +514,134 @@ msgstr "Uninterested (У нас нужных этому пиру частей т msgid "Choking (We are not allowing the peer to request pieces)" msgstr "Choking (Мы не позволяем этому пиру запрашивать у нас части торрента)" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:742 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:743 msgid "Add Torrent" msgstr "Добавить Торрент" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:744 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:745 msgid "From URL" msgstr "Из URL" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:749 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:750 msgid "Add torrent" msgstr "Добавить торрент" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:752 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:753 #, java-format msgid "Alternately, you can copy .torrent files to the directory {0}." msgstr "Ну или вы можете скопировать .torrent-файлы в директорию {0}." -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:754 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:755 msgid "Removing a .torrent file will cause the torrent to stop." msgstr "Удаление .torrent-файла приведет к остановке торрента." -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:770 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:772 msgid "Create Torrent" msgstr "Создать Торрент" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:773 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:775 msgid "Data to seed" msgstr "Файлы для раздачи" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:777 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:779 msgid "File or directory to seed (must be within the specified path)" msgstr "Файл или директория для раздачи (вводите только название файла или директории, указание абсолютных путей не поддерживается)" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:781 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:783 msgid "Select a tracker" msgstr "Выбрать трекер" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:794 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:796 msgid "or" msgstr "или" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:797 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:799 msgid "Specify custom tracker announce URL" msgstr "Задать URL анонсера вручную" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:800 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:802 msgid "Create torrent" msgstr "Создать торрент" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:817 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:820 msgid "Configuration" msgstr "Настройки" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:820 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:823 msgid "Data directory" msgstr "Директория для файлов" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:823 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:826 msgid "Directory to store torrents and data" msgstr "Директория, где будут храниться торренты и загружаемые файлы" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:825 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:828 msgid "Edit i2psnark.config and restart to change" msgstr "Для изменения отредактируйте файл i2psnark.config и перезагрузите I2PSnark" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:829 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:832 msgid "Auto start" msgstr "Автозапуск" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:833 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:836 msgid "If checked, automatically start torrents that are added" msgstr "Автоматически запускать торренты после добавления" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:856 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:859 msgid "Total uploader limit" msgstr "Ограничение количества слотов отдачи" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:863 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:866 msgid "Up bandwidth limit" msgstr "Ограничение скорости отдачи" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:866 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:869 msgid "Half available bandwidth recommended." msgstr "Рекомендуется использовать половину от доступной пропускной способности." -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:868 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:871 msgid "View or change router bandwidth" msgstr "Посмотреть/настроить ограничения скорости в маршрутизаторе I2P" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:872 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:875 msgid "Use open trackers also" msgstr "Дополнительно использовать открытые трекеры" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:876 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:879 msgid "If checked, announce torrents to open trackers as well as the tracker listed in the torrent file" msgstr "Анонсировать торренты на открытых трекерах, дополнительно к тем, что указаны внутри торрента" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:880 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:883 msgid "Open tracker announce URLs" msgstr "URL открытых трекеров" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:891 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:894 msgid "I2CP host" msgstr "Адрес I2CP" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:896 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:899 msgid "I2CP port" msgstr "Порт I2CP" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:909 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:912 msgid "I2CP options" msgstr "Параметры I2CP" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:914 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:917 msgid "Save configuration" msgstr "Сохранить настройки" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:967 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:970 #, java-format msgid "Torrent fetched from {0}" msgstr "Получен торрент из: {0}" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:994 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:998 #, java-format msgid "Torrent at {0} was not valid" msgstr "Торрент полученный из {0} некорректен" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:999 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1003 #, java-format msgid "Torrent was not retrieved from {0}" msgstr "Не удалось получить торрент из: {0}" diff --git a/apps/i2psnark/locale/messages_zh.po b/apps/i2psnark/locale/messages_zh.po index 54759f568..09e9e2012 100644 --- a/apps/i2psnark/locale/messages_zh.po +++ b/apps/i2psnark/locale/messages_zh.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: I2P i2psnark\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-18 06:45+0000\n" -"PO-Revision-Date: 2009-12-27 10:47+0800\n" +"POT-Creation-Date: 2010-01-29 07:17+0000\n" +"PO-Revision-Date: 2010-01-29 15:30+0800\n" "Last-Translator: walking \n" "Language-Team: foo \n" "MIME-Version: 1.0\n" @@ -141,8 +141,8 @@ msgstr "\"{0}\" ({1}) 含有太多文件,删除之!" #: ../java/src/org/klomp/snark/SnarkManager.java:564 #, java-format -msgid "Torrent file \"{0}\" cannot end in '.torrent', deleting it!" -msgstr "种子文件 \"{0}\" 不以 \".torrent\"结尾,删除之!" +msgid "Torrent file \"{0}\" cannot end in \".torrent\", deleting it!" +msgstr "种子文件 \"{0}\" 不以 \".torrent\"结尾,正在删除!" #: ../java/src/org/klomp/snark/SnarkManager.java:566 #, java-format diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/BufferLogger.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/BufferLogger.java deleted file mode 100644 index 80d1fd054..000000000 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/BufferLogger.java +++ /dev/null @@ -1,72 +0,0 @@ -/* I2PTunnel is GPL'ed (with the exception mentioned in I2PTunnel.java) - * (c) 2003 - 2004 mihi - */ -package net.i2p.i2ptunnel; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; - -import net.i2p.util.Log; - -/** - * Read what i2ptunnel logs, and expose it in a buffer - * - */ -class BufferLogger implements Logging { - private final static Log _log = new Log(BufferLogger.class); - private ByteArrayOutputStream _baos; // FIXME should be final and use a factory. FIXME - private boolean _ignore; - - /** - * Constructs a buffered logger. - */ - public BufferLogger() { - _baos = new ByteArrayOutputStream(512); - _ignore = false; - } - - private final static String EMPTY = ""; - - /** - * Retrieves the buffer - * @return the buffer - */ - public String getBuffer() { - if (_ignore) - return EMPTY; - - return new String(_baos.toByteArray()); - } - - /** - * We don't care about anything else the logger receives. This is useful - * for loggers passed in to servers and clients, since they will continue - * to add info to the logger, but if we're instantiated by the tunnel manager, - * its likely we only care about the first few messages it sends us. - * - */ - public void ignoreFurtherActions() { - _ignore = true; - synchronized (_baos) { - _baos.reset(); - } - _baos = null; - } - - /** - * Pass in some random data - * @param s String containing what we're logging. - */ - public void log(String s) { - if (_ignore) return; - if (s != null) { - _log.debug("logging [" + s + "]"); - try { - _baos.write(s.getBytes()); - _baos.write('\n'); - } catch (IOException ioe) { - _log.error("Error logging [" + s + "]"); - } - } - } -} \ No newline at end of file diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnel.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnel.java index 0b2d2d7c0..bfe311d3c 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnel.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnel.java @@ -236,6 +236,8 @@ public class I2PTunnel implements Logging, EventDispatcher { runServer(args, l); } else if ("httpserver".equals(cmdname)) { runHttpServer(args, l); + } else if ("httpbidirserver".equals(cmdname)) { + runHttpBidirServer(args, l); } else if ("ircserver".equals(cmdname)) { runIrcServer(args, l); } else if ("textserver".equals(cmdname)) { @@ -300,6 +302,7 @@ public class I2PTunnel implements Logging, EventDispatcher { l.log("ping "); l.log("server "); l.log("httpserver "); + l.log("httpbidirserver "); l.log("textserver "); l.log("genkeys []"); l.log("gentextkeys"); @@ -503,6 +506,80 @@ public class I2PTunnel implements Logging, EventDispatcher { } } + /** + * Run the HTTP server pointing at the host and port specified using the private i2p + * destination loaded from the specified file, replacing the HTTP headers + * so that the Host: specified is the one spoofed. Also runs an HTTP proxy for + * bidirectional communications on the same tunnel destination.

+ * + * Sets the event "serverTaskId" = Integer(taskId) after the tunnel has been started (or -1 on error) + * Also sets the event "openServerResult" = "ok" or "error" (displaying "Ready!" on the logger after + * 'ok'). So, success = serverTaskId != -1 and openServerResult = ok. + * + * @param args {hostname, portNumber, proxyPortNumber, spoofedHost, privKeyFilename} + * @param l logger to receive events and output + */ + public void runHttpBidirServer(String args[], Logging l) { + if (args.length == 5) { + InetAddress serverHost = null; + int portNum = -1; + int port2Num = -1; + File privKeyFile = null; + try { + serverHost = InetAddress.getByName(args[0]); + } catch (UnknownHostException uhe) { + l.log("unknown host"); + _log.error(getPrefix() + "Error resolving " + args[0], uhe); + notifyEvent("serverTaskId", Integer.valueOf(-1)); + return; + } + + try { + portNum = Integer.parseInt(args[1]); + } catch (NumberFormatException nfe) { + l.log("invalid port"); + _log.error(getPrefix() + "Port specified is not valid: " + args[1], nfe); + notifyEvent("serverTaskId", Integer.valueOf(-1)); + return; + } + + try { + port2Num = Integer.parseInt(args[2]); + } catch (NumberFormatException nfe) { + l.log("invalid port"); + _log.error(getPrefix() + "Port specified is not valid: " + args[2], nfe); + notifyEvent("serverTaskId", Integer.valueOf(-1)); + return; + } + + String spoofedHost = args[3]; + + privKeyFile = new File(args[4]); + if (!privKeyFile.isAbsolute()) + privKeyFile = new File(_context.getConfigDir(), args[4]); + if (!privKeyFile.canRead()) { + l.log("private key file does not exist"); + _log.error(getPrefix() + "Private key file does not exist or is not readable: " + args[4]); + notifyEvent("serverTaskId", Integer.valueOf(-1)); + return; + } + + I2PTunnelHTTPBidirServer serv = new I2PTunnelHTTPBidirServer(serverHost, portNum, port2Num, privKeyFile, args[3], spoofedHost, l, (EventDispatcher) this, this); + serv.setReadTimeout(readTimeout); + serv.startRunning(); + addtask(serv); + notifyEvent("serverTaskId", Integer.valueOf(serv.getId())); + return; + } else { + l.log("httpserver "); + l.log(" creates a bidirectional HTTP server that sends all incoming data\n" + + " of its destination to host:port., filtering the HTTP\n" + + " headers so it looks like the request is to the spoofed host," + + " and listens to host:proxyport to proxy HTTP requests."); + notifyEvent("serverTaskId", Integer.valueOf(-1)); + } + } + /** * Run the server pointing at the host and port specified using the private i2p * destination loaded from the given base64 stream.

diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelClientBase.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelClientBase.java index a7197a006..b3ffcdb45 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelClientBase.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelClientBase.java @@ -67,7 +67,7 @@ public abstract class I2PTunnelClientBase extends I2PTunnelTask implements Runna // private Object conLock = new Object(); /** List of Socket for those accept()ed but not yet started up */ - private List _waitingSockets = new ArrayList(); // FIXME should be final and use a factory. FIXME + protected final List _waitingSockets = new ArrayList(4); // FIXME should be final and use a factory. FIXME /** How many connections will we allow to be in the process of being built at once? */ private int _numConnectionBuilders; /** How long will we allow sockets to sit in the _waitingSockets map before killing them? */ @@ -89,12 +89,52 @@ public abstract class I2PTunnelClientBase extends I2PTunnelTask implements Runna private static final int DEFAULT_NUM_CONNECTION_BUILDERS = 5; private static final int DEFAULT_MAX_WAIT_TIME = 30*1000; - - //public I2PTunnelClientBase(int localPort, boolean ownDest, - // Logging l) { - // I2PTunnelClientBase(localPort, ownDest, l, (EventDispatcher)null); - //} + // true if we are chained from a server. + private boolean chained = false; + + public I2PTunnelClientBase(int localPort, Logging l, I2PSocketManager sktMgr, + I2PTunnel tunnel, EventDispatcher notifyThis, long clientId ) + throws IllegalArgumentException { + super(localPort + " (uninitialized)", notifyThis, tunnel); + chained = true; + sockMgr = sktMgr; + _clientId = clientId; + this.localPort = localPort; + this.l = l; + this.handlerName = handlerName + _clientId; + _ownDest = true; // == ! shared client + _context = tunnel.getContext(); + _context.statManager().createRateStat("i2ptunnel.client.closeBacklog", "How many pending sockets remain when we close one due to backlog?", "I2PTunnel", new long[] { 60*1000, 10*60*1000, 60*60*1000 }); + _context.statManager().createRateStat("i2ptunnel.client.closeNoBacklog", "How many pending sockets remain when it was removed prior to backlog timeout?", "I2PTunnel", new long[] { 60*1000, 10*60*1000, 60*60*1000 }); + _context.statManager().createRateStat("i2ptunnel.client.manageTime", "How long it takes to accept a socket and fire it into an i2ptunnel runner (or queue it for the pool)?", "I2PTunnel", new long[] { 60*1000, 10*60*1000, 60*60*1000 }); + _context.statManager().createRateStat("i2ptunnel.client.buildRunTime", "How long it takes to run a queued socket into an i2ptunnel runner?", "I2PTunnel", new long[] { 60*1000, 10*60*1000, 60*60*1000 }); + + Thread t = new I2PAppThread(this); + t.setName("Client " + _clientId); + listenerReady = false; + t.start(); + open = true; + synchronized (this) { + while (!listenerReady && open) { + try { + wait(); + } catch (InterruptedException e) { + // ignore + } + } + } + + configurePool(tunnel); + + if (open && listenerReady) { + l.log("Ready! Port " + getLocalPort()); + notifyEvent("openBaseClientResult", "ok"); + } else { + l.log("Error listening - please see the logs!"); + notifyEvent("openBaseClientResult", "error"); + } + } public I2PTunnelClientBase(int localPort, boolean ownDest, Logging l, EventDispatcher notifyThis, String handlerName, I2PTunnel tunnel) throws IllegalArgumentException { @@ -188,7 +228,7 @@ public abstract class I2PTunnelClientBase extends I2PTunnelTask implements Runna * */ private void configurePool(I2PTunnel tunnel) { - _waitingSockets = new ArrayList(4); + //_waitingSockets = new ArrayList(4); Properties opts = tunnel.getClientOptions(); String maxWait = opts.getProperty(PROP_MAX_WAIT_TIME, DEFAULT_MAX_WAIT_TIME+""); @@ -559,10 +599,12 @@ public abstract class I2PTunnelClientBase extends I2PTunnelTask implements Runna } return false; } - I2PSession session = sockMgr.getSession(); - if (session != null) { - getTunnel().removeSession(session); - } + if (!chained) { + I2PSession session = sockMgr.getSession(); + if (session != null) { + getTunnel().removeSession(session); + } + } // else the app chaining to this one closes it! } l.log("Closing client " + toString()); open = false; diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPBidirProxy.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPBidirProxy.java new file mode 100644 index 000000000..8c188d115 --- /dev/null +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPBidirProxy.java @@ -0,0 +1,54 @@ +/** + * DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + * Version 2, December 2004 + * + * Copyright (C) sponge + * Planet Earth + * Everyone is permitted to copy and distribute verbatim or modified + * copies of this license document, and changing it is allowed as long + * as the name is changed. + * + * DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + * TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + * + * 0. You just DO WHAT THE FUCK YOU WANT TO. + * + * See... + * + * http://sam.zoy.org/wtfpl/ + * and + * http://en.wikipedia.org/wiki/WTFPL + * + * ...for any additional details and liscense questions. + */ + +package net.i2p.i2ptunnel; + +// import java.util.ArrayList; + +import net.i2p.client.streaming.I2PSocketManager; +import net.i2p.util.EventDispatcher; + + +/** + * Reuse HTTP server's I2PSocketManager for a proxy with no outproxy capability. + * + * @author sponge + */ +public class I2PTunnelHTTPBidirProxy extends I2PTunnelHTTPClient implements Runnable { + + + /** + * @throws IllegalArgumentException if the I2PTunnel does not contain + * valid config to contact the router + */ + public I2PTunnelHTTPBidirProxy(int localPort, Logging l, I2PSocketManager sockMgr, I2PTunnel tunnel, EventDispatcher notifyThis, long clientId) { + super(localPort, l, sockMgr, tunnel, notifyThis, clientId); + // proxyList = new ArrayList(); + + setName(getLocalPort() + " -> HTTPClient [NO PROXIES]"); + startRunning(); + + notifyEvent("openHTTPClientResult", "ok"); + } +} diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPBidirServer.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPBidirServer.java new file mode 100644 index 000000000..54b2046cf --- /dev/null +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPBidirServer.java @@ -0,0 +1,44 @@ +/* I2PTunnel is GPL'ed (with the exception mentioned in I2PTunnel.java) + * (c) 2003 - 2004 mihi + */ +package net.i2p.i2ptunnel; + +import java.io.File; +import java.io.InputStream; +import java.net.InetAddress; + +import net.i2p.util.EventDispatcher; +import net.i2p.util.Log; + +public class I2PTunnelHTTPBidirServer extends I2PTunnelHTTPServer { + private final static Log log = new Log(I2PTunnelHTTPBidirServer.class); + + public I2PTunnelHTTPBidirServer(InetAddress host, int port, int proxyport, String privData, String spoofHost, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel) { + super(host, port, privData, spoofHost, l, notifyThis, tunnel); + finishSetupI2PTunnelHTTPBidirServer(l, proxyport); + } + + public I2PTunnelHTTPBidirServer(InetAddress host, int port, int proxyport, File privkey, String privkeyname, String spoofHost, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel) { + super(host, port, privkey, privkeyname, spoofHost, l, notifyThis, tunnel); + finishSetupI2PTunnelHTTPBidirServer(l, proxyport); + } + + public I2PTunnelHTTPBidirServer(InetAddress host, int port, int proxyport, InputStream privData, String privkeyname, String spoofHost, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel) { + super(host, port, privData, privkeyname, spoofHost, l, notifyThis, tunnel); + finishSetupI2PTunnelHTTPBidirServer(l, proxyport); + } + + private void finishSetupI2PTunnelHTTPBidirServer(Logging l, int proxyport) { + + localPort = proxyport; + bidir = true; + + /* start the httpclient */ + task = new I2PTunnelHTTPBidirProxy(localPort, l, sockMgr, getTunnel(), getEventDispatcher(), __serverId); + sockMgr.setName("Server"); // TO-DO: Need to change this to "Bidir"! + getTunnel().addSession(sockMgr.getSession()); + l.log("Ready!"); + notifyEvent("openServerResult", "ok"); + } +} + diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java index 3598ac05c..a86e01c65 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java @@ -24,6 +24,7 @@ import java.util.StringTokenizer; import net.i2p.I2PAppContext; import net.i2p.I2PException; import net.i2p.client.streaming.I2PSocket; +import net.i2p.client.streaming.I2PSocketManager; import net.i2p.client.streaming.I2PSocketOptions; import net.i2p.data.DataFormatException; import net.i2p.data.DataHelper; @@ -56,7 +57,7 @@ import net.i2p.util.Translate; public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable { private static final Log _log = new Log(I2PTunnelHTTPClient.class); - private final List proxyList; + protected final List proxyList = new ArrayList(); private HashMap addressHelpers = new HashMap(); @@ -150,7 +151,15 @@ public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable private static final File _errorDir = new File(I2PAppContext.getGlobalContext().getBaseDir(), "docs"); + public I2PTunnelHTTPClient(int localPort, Logging l, I2PSocketManager sockMgr, I2PTunnel tunnel, EventDispatcher notifyThis, long clientId) { + super(localPort, l, sockMgr, tunnel, notifyThis, clientId); + // proxyList = new ArrayList(); + setName(getLocalPort() + " -> HTTPClient [NO PROXIES]"); + startRunning(); + + notifyEvent("openHTTPClientResult", "ok"); + } /** * @throws IllegalArgumentException if the I2PTunnel does not contain * valid config to contact the router @@ -160,7 +169,7 @@ public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable I2PTunnel tunnel) throws IllegalArgumentException { super(localPort, ownDest, l, notifyThis, "HTTPHandler " + (++__clientId), tunnel); - proxyList = new ArrayList(); + //proxyList = new ArrayList(); // We won't use outside of i2p if (waitEventValue("openBaseClientResult").equals("error")) { notifyEvent("openHTTPClientResult", "error"); return; @@ -251,6 +260,7 @@ public class I2PTunnelHTTPClient extends I2PTunnelClientBase implements Runnable /** * Overridden to close internal socket too. */ + @Override public boolean close(boolean forced) { boolean rv = super.close(forced); if (this.isr != null) diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPServer.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPServer.java index af9f1c1ec..d23185780 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPServer.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPServer.java @@ -39,21 +39,21 @@ public class I2PTunnelHTTPServer extends I2PTunnelServer { public I2PTunnelHTTPServer(InetAddress host, int port, String privData, String spoofHost, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel) { super(host, port, privData, l, notifyThis, tunnel); - _spoofHost = spoofHost; - getTunnel().getContext().statManager().createRateStat("i2ptunnel.httpserver.blockingHandleTime", "how long the blocking handle takes to complete", "I2PTunnel", new long[] { 60*1000, 10*60*1000, 3*60*60*1000 }); - getTunnel().getContext().statManager().createRateStat("i2ptunnel.httpNullWorkaround", "How often an http server works around a streaming lib or i2ptunnel bug", "I2PTunnel", new long[] { 60*1000, 10*60*1000 }); + setupI2PTunnelHTTPServer(spoofHost); } public I2PTunnelHTTPServer(InetAddress host, int port, File privkey, String privkeyname, String spoofHost, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel) { super(host, port, privkey, privkeyname, l, notifyThis, tunnel); - _spoofHost = spoofHost; - getTunnel().getContext().statManager().createRateStat("i2ptunnel.httpserver.blockingHandleTime", "how long the blocking handle takes to complete", "I2PTunnel.HTTPServer", new long[] { 60*1000, 10*60*1000, 3*60*60*1000 }); - getTunnel().getContext().statManager().createRateStat("i2ptunnel.httpNullWorkaround", "How often an http server works around a streaming lib or i2ptunnel bug", "I2PTunnel.HTTPServer", new long[] { 60*1000, 10*60*1000 }); + setupI2PTunnelHTTPServer(spoofHost); } public I2PTunnelHTTPServer(InetAddress host, int port, InputStream privData, String privkeyname, String spoofHost, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel) { super(host, port, privData, privkeyname, l, notifyThis, tunnel); - _spoofHost = spoofHost; + setupI2PTunnelHTTPServer(spoofHost); + } + + private void setupI2PTunnelHTTPServer(String spoofHost) { + _spoofHost = spoofHost; getTunnel().getContext().statManager().createRateStat("i2ptunnel.httpserver.blockingHandleTime", "how long the blocking handle takes to complete", "I2PTunnel.HTTPServer", new long[] { 60*1000, 10*60*1000, 3*60*60*1000 }); getTunnel().getContext().statManager().createRateStat("i2ptunnel.httpNullWorkaround", "How often an http server works around a streaming lib or i2ptunnel bug", "I2PTunnel.HTTPServer", new long[] { 60*1000, 10*60*1000 }); } diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelServer.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelServer.java index 2471fcc50..a00fc7d8d 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelServer.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelServer.java @@ -4,6 +4,7 @@ package net.i2p.i2ptunnel; import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; @@ -48,26 +49,29 @@ public class I2PTunnelServer extends I2PTunnelTask implements Runnable { protected long readTimeout = DEFAULT_READ_TIMEOUT; private static final boolean DEFAULT_USE_POOL = false; - + protected static volatile long __serverId = 0; + private static final String PROP_HANDLER_COUNT = "i2ptunnel.blockingHandlerCount"; + private static final int DEFAULT_HANDLER_COUNT = 10; + + + + protected I2PTunnelTask task = null; + protected boolean bidir = false; + + private int DEFAULT_LOCALPORT = 4488; + protected int localPort = DEFAULT_LOCALPORT; + public I2PTunnelServer(InetAddress host, int port, String privData, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel) { super(host + ":" + port + " <- " + privData, notifyThis, tunnel); ByteArrayInputStream bais = new ByteArrayInputStream(Base64.decode(privData)); - String usePool = tunnel.getClientOptions().getProperty("i2ptunnel.usePool"); - if (usePool != null) - _usePool = "true".equalsIgnoreCase(usePool); - else - _usePool = DEFAULT_USE_POOL; + SetUsePool(tunnel); init(host, port, bais, privData, l); } public I2PTunnelServer(InetAddress host, int port, File privkey, String privkeyname, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel) { super(host + ":" + port + " <- " + privkeyname, notifyThis, tunnel); - String usePool = tunnel.getClientOptions().getProperty("i2ptunnel.usePool"); - if (usePool != null) - _usePool = "true".equalsIgnoreCase(usePool); - else - _usePool = DEFAULT_USE_POOL; + SetUsePool(tunnel); FileInputStream fis = null; try { fis = new FileInputStream(privkey); @@ -83,12 +87,17 @@ public class I2PTunnelServer extends I2PTunnelTask implements Runnable { public I2PTunnelServer(InetAddress host, int port, InputStream privData, String privkeyname, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel) { super(host + ":" + port + " <- " + privkeyname, notifyThis, tunnel); - String usePool = tunnel.getClientOptions().getProperty("i2ptunnel.usePool"); + SetUsePool(tunnel); + init(host, port, privData, privkeyname, l); + } + + + private void SetUsePool(I2PTunnel Tunnel) { + String usePool = Tunnel.getClientOptions().getProperty("i2ptunnel.usePool"); if (usePool != null) _usePool = "true".equalsIgnoreCase(usePool); else _usePool = DEFAULT_USE_POOL; - init(host, port, privData, privkeyname, l); } private void init(InetAddress host, int port, InputStream privData, String privkeyname, Logging l) { @@ -106,17 +115,29 @@ public class I2PTunnelServer extends I2PTunnelTask implements Runnable { } } + // copy the privData to a new BAIS, so we can always reset() it if we have to retry + ByteArrayInputStream privDataCopy; + try { + privDataCopy = copyOfInputStream(privData); + } catch (IOException ioe) { + _log.log(Log.CRIT, "Cannot read private key data for " + privkeyname, ioe); + return; + } + + // Todo: Can't stop a tunnel from the UI while it's in this loop (no session yet) while (sockMgr == null) { synchronized (slock) { - sockMgr = I2PSocketManagerFactory.createManager(privData, getTunnel().host, portNum, + sockMgr = I2PSocketManagerFactory.createManager(privDataCopy, getTunnel().host, portNum, props); } if (sockMgr == null) { _log.log(Log.CRIT, "Unable to create socket manager"); try { Thread.sleep(10*1000); } catch (InterruptedException ie) {} + privDataCopy.reset(); } } + sockMgr.setName("Server"); getTunnel().addSession(sockMgr.getSession()); l.log("Ready!"); @@ -124,8 +145,24 @@ public class I2PTunnelServer extends I2PTunnelTask implements Runnable { open = true; } - - private static volatile long __serverId = 0; + /** + * Copy input stream to a byte array, so we can retry + * @since 0.7.10 + */ + private static ByteArrayInputStream copyOfInputStream(InputStream is) throws IOException { + byte[] buf = new byte[128]; + ByteArrayOutputStream os = new ByteArrayOutputStream(768); + try { + int read; + while ((read = is.read(buf)) >= 0) { + os.write(buf, 0, read); + } + } finally { + try { is.close(); } catch (IOException ioe) {} + // don't need to close BAOS + } + return new ByteArrayInputStream(os.toByteArray()); + } /** * Start running the I2PTunnelServer. @@ -158,6 +195,9 @@ public class I2PTunnelServer extends I2PTunnelTask implements Runnable { public boolean close(boolean forced) { if (!open) return true; + if (task != null) { + task.close(forced); + } synchronized (lock) { if (!forced && sockMgr.listSockets().size() != 0) { l.log("There are still active connections!"); @@ -181,9 +221,6 @@ public class I2PTunnelServer extends I2PTunnelTask implements Runnable { } } - private static final String PROP_HANDLER_COUNT = "i2ptunnel.blockingHandlerCount"; - private static final int DEFAULT_HANDLER_COUNT = 10; - protected int getHandlerCount() { int rv = DEFAULT_HANDLER_COUNT; String cnt = getTunnel().getClientOptions().getProperty(PROP_HANDLER_COUNT); diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelController.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelController.java index 06beffae5..4084b702c 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelController.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelController.java @@ -154,6 +154,8 @@ public class TunnelController implements Logging { startServer(); } else if ("httpserver".equals(type)) { startHttpServer(); + } else if ("httpbidirserver".equals(type)) { + startHttpBidirServer(); } else if ("ircserver".equals(type)) { startIrcServer(); } else if ("streamrserver".equals(type)) { @@ -294,6 +296,16 @@ public class TunnelController implements Logging { _tunnel.runHttpServer(new String[] { targetHost, targetPort, spoofedHost, privKeyFile }, this); } + private void startHttpBidirServer() { + setListenOn(); + String targetHost = getTargetHost(); + String targetPort = getTargetPort(); + String listenPort = getListenPort(); + String spoofedHost = getSpoofedHost(); + String privKeyFile = getPrivKeyFile(); + _tunnel.runHttpBidirServer(new String[] { targetHost, targetPort, listenPort, spoofedHost, privKeyFile }, this); + } + private void startIrcServer() { String targetHost = getTargetHost(); String targetPort = getTargetPort(); diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/streamr/Pinger.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/streamr/Pinger.java index b1abd47e1..695e0e25a 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/streamr/Pinger.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/streamr/Pinger.java @@ -16,7 +16,7 @@ public class Pinger implements Source, Runnable { public void start() { this.running = true; - this.waitlock = new Object(); + //this.waitlock = new Object(); this.thread.start(); } @@ -54,6 +54,6 @@ public class Pinger implements Source, Runnable { protected Sink sink; protected Thread thread; - protected Object waitlock; // FIXME should be final and use a factory. FIXME + private final Object waitlock = new Object(); protected boolean running; } diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/udp/I2PSink.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/udp/I2PSink.java index 6d8737f48..c0e4c6693 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/udp/I2PSink.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/udp/I2PSink.java @@ -29,7 +29,7 @@ public class I2PSink implements Sink { // create maker if (!raw) - this.maker = new I2PDatagramMaker(this.sess); + this.maker.setI2PDatagramMaker(this.sess); } /** @param src ignored */ @@ -54,20 +54,8 @@ public class I2PSink implements Sink { } } - - - - - - - - - - - - protected boolean raw; protected I2PSession sess; protected Destination dest; - protected I2PDatagramMaker maker; // FIXME should be final and use a factory. FIXME + protected final I2PDatagramMaker maker= new I2PDatagramMaker(); // FIXME should be final and use a factory. FIXME } diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/udp/I2PSinkAnywhere.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/udp/I2PSinkAnywhere.java index 143422ce4..a2793e7dd 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/udp/I2PSinkAnywhere.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/udp/I2PSinkAnywhere.java @@ -28,7 +28,7 @@ public class I2PSinkAnywhere implements Sink { // create maker if (!raw) - this.maker = new I2PDatagramMaker(this.sess); + this.maker.setI2PDatagramMaker(this.sess); } /** @param to - where it's going */ @@ -52,20 +52,8 @@ public class I2PSinkAnywhere implements Sink { } } - - - - - - - - - - - - protected boolean raw; protected I2PSession sess; protected Destination dest; - protected I2PDatagramMaker maker; // FIXME should be final and use a factory. FIXME + protected final I2PDatagramMaker maker = new I2PDatagramMaker(); } 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 6951286dc..ac1f7c77f 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/IndexBean.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/IndexBean.java @@ -389,6 +389,7 @@ public class IndexBean { else if ("ircserver".equals(internalType)) return _("IRC server"); else if ("streamrclient".equals(internalType)) return _("Streamr client"); else if ("streamrserver".equals(internalType)) return _("Streamr server"); + else if ("httpbidirserver".equals(internalType)) return _("HTTP bidir"); else return internalType; } @@ -779,8 +780,11 @@ public class IndexBean { config.setProperty("listenPort", _port); if (_reachableByOther != null) config.setProperty("interface", _reachableByOther); - else + else if (_reachableBy != null) config.setProperty("interface", _reachableBy); + else + config.setProperty("interface", ""); + config.setProperty("sharedClient", _sharedClient + ""); for (String p : _booleanClientOpts) config.setProperty("option." + p, "" + _booleanOptions.contains(p)); @@ -806,11 +810,22 @@ public class IndexBean { } else if ("ircclient".equals(_type) || "client".equals(_type) || "streamrclient".equals(_type)) { if (_targetDestination != null) config.setProperty("targetDestination", _targetDestination); - } else if ("httpserver".equals(_type)) { + } else if ("httpserver".equals(_type) || "httpbidirserver".equals(_type)) { if (_spoofedHost != null) config.setProperty("spoofedHost", _spoofedHost); } - + if ("httpbidirserver".equals(_type)) { + if (_port != null) + config.setProperty("listenPort", _port); + if (_reachableByOther != null) + config.setProperty("interface", _reachableByOther); + else if (_reachableBy != null) + config.setProperty("interface", _reachableBy); + else if (_targetHost != null) + config.setProperty("interface", _targetHost); + else + config.setProperty("interface", ""); + } return config; } diff --git a/apps/i2ptunnel/jsp/editServer.jsp b/apps/i2ptunnel/jsp/editServer.jsp index 24f6b0d03..90a7614f2 100644 --- a/apps/i2ptunnel/jsp/editServer.jsp +++ b/apps/i2ptunnel/jsp/editServer.jsp @@ -113,11 +113,58 @@ + <% if ("httpbidirserver".equals(tunnelType)) { + %> +

+
+
+
+ +
+
+ + +
+ <% String otherInterface = ""; + String clientInterface = editBean.getClientInterface(curTunnel); + %> +
+ + +
+
+ + +
+ <% } %>

- <% if ("httpserver".equals(tunnelType)) { + <% if (("httpserver".equals(tunnelType)) || ("httpbidirserver".equals(tunnelType))) { %>
diff --git a/apps/routerconsole/jsp/help.jsp b/apps/routerconsole/jsp/help.jsp index 50c430f02..86acd6dac 100644 --- a/apps/routerconsole/jsp/help.jsp +++ b/apps/routerconsole/jsp/help.jsp @@ -92,7 +92,12 @@ shared bandwidth, and amount of locally-generated traffic. The recommended method for limiting participating tunnels is to change your share percentage on the configuration page. You may also limit the total number by setting router.maxParticipatingTunnels=nnn on -the advanced configuration page. [Enable graphing]. +the advanced configuration page. [Enable graphing]. +
  • Share ratio: +The number of participating tunnels you route for others, divided by the total number of hops in +all your exploratory and client tunnels. +A number greater than 1.00 means you are contributing more tunnels to the network than you are using. +

    Congestion

    Some basic indications of router overload:
      diff --git a/apps/routerconsole/jsp/help_ru.jsp b/apps/routerconsole/jsp/help_ru.jsp new file mode 100644 index 000000000..560759236 --- /dev/null +++ b/apps/routerconsole/jsp/help_ru.jsp @@ -0,0 +1,176 @@ +<%@page contentType="text/html"%> +<%@page pageEncoding="UTF-8"%> + +<% + /* + * Do not tag this file for translation - copy it to help_xx.jsp and translate inline. + */ +%> +Консоль маршрутизатора I2P - справка +<%@include file="css.jsi" %> + +<%@include file="summary.jsi" %> + +

      Справка маршрутизатора I2P

      + +
      + +

      Если Вы хотите помочь в улучшении или переводе документации, если у Вас есть идеи, как еще помочь проекту, пожалуйста, загляните в раздел документации +как стать участником.

      + +

      Дальнейшие инструкции доступны в FAQ на www.i2p2.i2p + +
      Также, имеет смысл зайти на форум I2P и IRC-каналы проекта.

      + +

      Описание статусной панели

      + +

      +Для большинства параметров на статусной панели можно настроить построение графиков в целях более подробного анализа. +

      + +

      Общая информация

        + +
      • Локальный идентификатор + +Первые 4 символа (24 бита) из Вашего 44-символьного (256-битного) Base64 хеша маршрутизатора. Полный хеш показывается на странице информации о маршрутизаторе. Никогда никому не показывайте хеш своего маршрутизатора, так как в нем содержится информация о Вашем IP-адресе. + + +
      • Версия: + +Версия Вашего I2P маршрутизатора. + +
      • Время: + +Текущее время (UTC) и величина рассинхронизации времени (если есть). Для правильной работы I2P нужно точное системное время. Пожалуйста, поправьте системное время, если расхождение приближается к 1-ой минуте. + +
      • Доступность: + +Результат проверки Вашим маршрутизатором, насколько он открыт для входящих соединений от маршрутизаторов других пользователей. Подробнее смотрите на странице сетевых настроек. + +
      + +

      Пиры

        + +
      • Активные: + +Первое число — это количество пиров, с которыми происходил обмен сообщениями за последние несколько минут. Значение может меняться от 8-10 до нескольких сотен в зависимости от Вашего общего трафика, доли транзитного трафика, локально создаваемого трафика. Второе число — это количество пиров, наблюдавшихся за последний час. Не волнуйтесь, если эти числа сильно меняются. Это нормально. [Включить построение графика]. + +
      • Быстрые: + +Количество пиров, которые используются Вашим маршрутизатором для построения клиентских туннелей. В общем случае это значение будет в диапазоне 8-15. Список быстрых пиров можно посмотреть на странице профили. [Включить построение графика]. + +
      • Высокоёмкие: + +Количество пиров, которые используются Вашим маршрутизатором для построения части зондирующих туннелей. В общем случае это значение будет в диапазоне 8-25. Быстрые пиры входят в группу высокоёмких. Список высокоёмких пиров можно посмотреть на странице профили. [Включить построение графика]. + +
      • Хорошо интегрированные: + +Количество пиров, которые используются Вашим маршрутизатором для запросов к сетевой базе данных. Обычно в таком качестве выступают «floodfill» пиры. Список хорошо интегрированных пиров можно посмотреть в конце страницы профили. + +
      • Известные: + +Это общее количество пиров известных Вашему маршрутизатору. Их список показывается на странице обзор сетевой базы данных. Это значение может варьироваться от десятков до тысяч. Значение не соответствует реальному полному размеру сети, так как маршрутизатору в сети I2P достаточно знать лишь часть других маршрутизаторов. Значение зависит от Вашего общего трафика, доли транзитного трафика, локально создаваемого трафика. + +
      + +

      Трафик (входящий/исходящий)

      + +
      +Все значения показаны в байтах/секунду. Настроить ограничения трафика можно на странице сетевых настроек. +Для трафика по умолчанию включено построение графиков.
      + +

      Локальные туннели

      + +
      +Локальные приложения, выходящие в I2P сеть через Ваш маршрутизатор. Это могут быть клиенты, запущенные через менеджер туннелей, внешние программы, подключающиеся через интерфейсы SAM, BOB или напрямую через I2CP. +
      + +

      Туннели (входящие/исходящие)

      + +
      +Список туннелей можно посмотреть на странице обзор туннелей.
      + +
        + +
      • Зондирующие: +Туннели, созданные Вашим маршрутизатором для связи с floodfill-пирами, тестирования уже существующих туннелей и построения новых.
        + +
      • Клиентские: +Туннели, созданные Вашим маршрутизатором для каждого локального клиента. + +
      • Транзитные: + +Туннели, построенные другими маршрутизаторами, проходящие через Ваш маршрутизатор. Их количество может сильно варьироваться в зависимости от потребностей сети, настроенной доли транзитного трафика и объема локально создаваемого трафика. Рекомендуемый способ ограничения количества транзитных туннелей — настроить долю транзитного трафика на странице сетевых настроек. Также можно задать точный ограничитель количества через параметр router.maxParticipatingTunnels=nnn на странице дополнительных настроек. + +[Включить построение графика]. + +
      • Доля транзита: + +Количество транзитных туннелей, проходящих через Ваш маршрутизатор, поделенное на суммарное количество хопов в Ваших зондирующих и клиентских туннелях. Значение больше 1.00 означает, что Вы предоставляете для сети больше туннелей, чем используете сами. + +
      + +

      Занятость

      + +
      Некоторые базовые индикаторы перегруженности маршрутизатора:
      +
        + +
      • Задержка заданий: + +Как долго задания ожидают выполнения. Содержимое очереди можно посмотреть на странице очередь заданий. К сожалению, есть ещё несколько внутренних очередей, статус которых в консоли не показывается. Задержка заданий в нормальной ситуации должна быть нулевой. Если она систематически выше 500ms, то либо Ваш компьютер слишком медленный, либо с Вашим маршрутизатором проблемы. + +[Включить построение графика]. + +
      • Задержка сообщений: + +Как долго исходящие сообщения находятся в очереди. В нормальном случае эта задержка должна быть не выше нескольких сотен миллисекунд. Если она систематически выше 1000ms, то либо Ваш компьютер слишком медленный, либо Вам следует перенастроить ограничение скорости, либо локальные клиенты (чаще всего bittorrent) посылают слишком много данных. Для таких клиентов имеет смысл ограничить скорость. + +[Включить построение графика] (transport.sendProcessingTime). + +
      • Задержка туннелей: + +Время прохождения сигнала при проверке туннеля (сообщение посылается от клиентского туннеля до зондирующего или в обратном направлении). Это значение в нормальном случае должно быть ниже 5 секунд. Если оно систематически выше, то либо Ваш компьютер слишком медленный, либо Вам следует перенастроить ограничение скорости, либо с сетью что-то не в порядке. + +[Включить построение графика] (tunnel.testSuccessTime). + +
      • Очередь запросов: + +Количество пока необработанных запросов от других маршрутизаторов о построении транзитных туннелей через Ваш маршрутизатор. В нормальном случае это значение должно быть около нуля. Если оно систематически выше, то Ваш компьютер слишком медленный и Вам следует настроить меньшую долю транзитного трафика. + +
      • Принимаем/Не принимаем туннели: + +Состояние Вашего маршрутизатора по приему или отклонению запросов от других маршрутизаторов о построении туннелей. Ваш маршрутизатор может принимать все запросы, принимать/отклонять часть запросов или отклонять все запросы, в зависимости от сетевой загрузки, нагрузки на процессор и необходимости резервировать полосу пропускания для локальных клиентов. + +
      + +

      Лицензии

      + +

      Код I2P-маршрутизатора (router.jar) и его SDK (i2p.jar) находятся в общественном достоянии с некоторыми исключениями:

      + +
        +
      • Код для алгоритмов ElGamal и DSA — под лицензией BSD, автор: TheCrypto
      • +
      • Код для алгоритмов SHA256 и HMAC-SHA256 — под лицензией MIT, автор: Legion из Bouncycastle
      • +
      • Код для алгоритма AES — под лицензией Cryptix (MIT), авторы: Cryptix team
      • +
      • Код для SNTP — под лицензией BSD, автор: Adam Buckley
      • +
      • Всё остальное полностью в общественном достоянии, авторы: jrandom, mihi, hypercubus, oOo, ugha, duck, shendaras, и другие.
      • +
      + +

      Поверх I2P маршрутизатора работают различные приложения-клиенты, каждое со своим набором лицензий и зависимостей. Например, эта страница входит в приложение консоли маршрутизатора, которое сделано из усеченной версии Jetty (в сборку не включены демонстрационные приложения и прочие дополнения, настройки упрощены). Jetty позволяет запускать в составе маршрутизатора стандартные JSP/сервлеты. Jetty использует javax.servlet.jar разработанный в составе проекта Apache (http://www.apache.org/). +

      + +

      Ещё одно приложение на этой странице — I2PTunnel (а тут его вебинтерфейс). Автор mihi, лицензия GPL. I2PTunnel занимается туннелированнием обычного TCP/IP трафика через I2P (может применяться для eepproxy и irc-прокси). susimail — почтовый клиент с вебинтерфейсом, автор susi23, лицензия GPL. Адресная книга помогает управлять содержимым Ваших hosts.txt файлов (подробнее см. ./addressbook/), автор Ragnarok.

      + +

      В поставку маршрутизатора включен SAM интерфейс, автор human, приложение в общественном достоянии. SAM предназначен для использования приложениями-клиентами, такими как bittorrent-клиенты. Маршрутизатором используется оптимизированная под разные PC-архитектуры библиотека для вычислений с большими числами – jbigi, которая в свою очередь использует библиотеку GMP (LGPL лицензия). Вспомогательные приложения для Windows созданы с использованием Launch4J, а инсталлятор собран при помощи IzPack. Подробнее о других доступных приложениях и их лицензиях смотрите на странице I2P Software Licenses. Исходный код I2P маршрутизатора и идущих в комплекте приложений можно найти на нашей странице загрузки.

      + + +

      История версий

      + + + <% java.io.File fpath = new java.io.File(net.i2p.I2PAppContext.getGlobalContext().getBaseDir(), "history.txt"); %> + + + + + +

      Более подробный список изменений можно найти в файле history.txt в каталоге Вашего I2P. +


      diff --git a/apps/routerconsole/jsp/viewstat.jsp b/apps/routerconsole/jsp/viewstat.jsp index 666e78fb4..2afa5c560 100644 --- a/apps/routerconsole/jsp/viewstat.jsp +++ b/apps/routerconsole/jsp/viewstat.jsp @@ -51,7 +51,7 @@ if ( !rendered && ((rs != null) || fakeBw) ) { boolean hideGrid = Boolean.valueOf(""+request.getParameter("hideGrid")).booleanValue(); boolean hideTitle = Boolean.valueOf(""+request.getParameter("hideTitle")).booleanValue(); boolean showEvents = Boolean.valueOf(""+request.getParameter("showEvents")).booleanValue(); - boolean showCredit = true; + boolean showCredit = false; if (request.getParameter("showCredit") != null) showCredit = Boolean.valueOf(""+request.getParameter("showCredit")).booleanValue(); if (fakeBw) diff --git a/apps/routerconsole/locale/messages_fr.po b/apps/routerconsole/locale/messages_fr.po index a60847336..c6c54e617 100644 --- a/apps/routerconsole/locale/messages_fr.po +++ b/apps/routerconsole/locale/messages_fr.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: I2P routerconsole\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-11-01 02:59+0000\n" -"PO-Revision-Date: 2009-12-04 22:22+0100\n" +"PO-Revision-Date: 2010-01-17 22:09+0100\n" "Last-Translator: \n" "Language-Team: foo \n" "MIME-Version: 1.0\n" @@ -90,7 +90,7 @@ msgstr "Limiteur de bande passante" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:299 msgid "I2P will work best if you configure your rates to match the speed of your internet connection." -msgstr "" +msgstr "I2P fonctionnera mieux si vous configurez le débit de transmission et réception pour qu'ils soient égales à ceux de votre connexion internet." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:303 msgid "KBps In" @@ -117,15 +117,15 @@ msgstr "Vous avez configuré I2P à partager que {0} KOps." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:335 msgid "I2P requires at least 12KBps to enable sharing. " -msgstr "" +msgstr "I2P a besoin de plus de 12KOps afin d'activer le partage de bande passante" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:336 msgid "Please enable sharing (participating in tunnels) by configuring more bandwidth. " -msgstr "" +msgstr "Veuillez activer le partage de bande passante (tunnels participants) en augmentant votre bande passante." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:337 msgid "It improves your anonymity by creating cover traffic, and helps the network." -msgstr "" +msgstr "Cela aidera votre anonymat en cachant vos données parmi les données des autres, et cela améliorera le réseau." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:340 #, java-format @@ -134,7 +134,7 @@ msgstr "Vous avez configuré I2P à partager {0} KOps." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:343 msgid "The higher the share bandwidth the more you improve your anonymity and help the network." -msgstr "" +msgstr "En partageant plus de votre bande passante, vous améliorerez votre anonymat et le réseau." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:347 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:478 @@ -165,7 +165,7 @@ msgstr "" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:355 msgid "The default settings will work for most people." -msgstr "" +msgstr "La configuration par défaut marchera pour la plupart des gens." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:357 msgid "There is help below." @@ -202,7 +202,7 @@ msgstr "" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:381 msgid "Ignore local interface IP address" -msgstr "" +msgstr "Ignorer l'adresse IP de l'interface locale" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:385 msgid "Use SSU IP address detection only" @@ -211,7 +211,7 @@ msgstr "" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:389 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:443 msgid "Specify hostname or IP" -msgstr "Stipuler l'adresse IP ou le nom de l'hôte" +msgstr "Saisir l'adresse IP ou le nom de l'hôte" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:395 msgid "Select Interface" @@ -266,7 +266,7 @@ msgstr "" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:453 msgid "Completely disable" -msgstr "" +msgstr "Desactiver complètement" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:455 msgid "(select only if behind a firewall that throttles or blocks outbound TCP)" @@ -282,7 +282,7 @@ msgstr "" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:469 msgid "Specify Port" -msgstr "Stipuler le port" +msgstr "Saisir le port" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:473 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:342 @@ -454,7 +454,7 @@ msgstr "" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:562 msgid "WARN - Firewalled and Fast" -msgstr "" +msgstr "WARN - Pare-feu et Rapide" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:564 msgid "You have configured I2P to share more than 128KBps of bandwidth, but you are firewalled." @@ -466,7 +466,7 @@ msgstr "" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:568 msgid "WARN - Firewalled and Floodfill" -msgstr "" +msgstr "WARN - Pare-feu et Floodfill" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:570 msgid "You have configured I2P to be a floodfill router, but you are firewalled." @@ -478,7 +478,7 @@ msgstr "" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:574 msgid "WARN - Firewalled with Inbound TCP Enabled" -msgstr "" +msgstr "WARN - Pare-feu avec TCP entrant activé" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:576 msgid "You have configured inbound TCP, however your UDP port is firewalled, and therefore it is likely that your TCP port is firewalled as well." @@ -494,7 +494,7 @@ msgstr "" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:582 msgid "WARN - Firewalled with UDP Disabled" -msgstr "" +msgstr "WARN - Pare-feu avec UDP desactivé" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:584 msgid "You have configured inbound TCP, however you have disabled UDP." @@ -522,7 +522,7 @@ msgstr "" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:596 msgid "ERR - Private TCP Address" -msgstr "" +msgstr "ERR - Adresse TCP privée" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:598 msgid "You must never advertise an unroutable IP address such as 127.0.0.1 or 192.168.1.1 as your external address." @@ -534,7 +534,7 @@ msgstr "" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:602 msgid "ERR - SymmetricNAT" -msgstr "" +msgstr "ERR - NAT symétrique" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:604 msgid "I2P detected that you are firewalled by a Symmetric NAT." @@ -881,7 +881,7 @@ msgstr "" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:300 msgid "This is useful in some situations" -msgstr "" +msgstr "C'est utile dans certains cas" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:302 msgid "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." @@ -1107,7 +1107,7 @@ msgstr "" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:319 msgid "Please contribute to the router console translation project! Contact the developers on IRC #i2p to help." -msgstr "" +msgstr "Veuillez contribuer à la traduction du 'router console' ! Contactez les développeurs sur IRC #i2p afin de donner un coup de main." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:106 msgid "config update" @@ -1235,7 +1235,7 @@ msgstr "" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:231 msgid "Please include this information in bug reports" -msgstr "" +msgstr "Veuillez inclure cette information dans les rapports des bugs" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/netdb_jsp.java:105 msgid "network database summary" @@ -1308,7 +1308,7 @@ msgstr "Non supportée" #: src/net/i2p/router/web/ConfigClientsHandler.java:83 msgid "Client configuration saved successfully - restart required to take effect." -msgstr "" +msgstr "La configuration du client a été sauvegardé avec succès - redémarrer pour prendre effet. " #: src/net/i2p/router/web/ConfigClientsHandler.java:89 msgid "Bad client index." @@ -1341,7 +1341,7 @@ msgstr "Echec de démarrage" #: src/net/i2p/router/web/ConfigClientsHandler.java:137 msgid "Failed to find server." -msgstr "" +msgstr "Pas pu trouver un serveur." #: src/net/i2p/router/web/ConfigClientsHelper.java:17 msgid "Class and arguments" @@ -1529,7 +1529,7 @@ msgstr "" #: src/net/i2p/router/web/ConfigNetHandler.java:293 msgid "Updating bandwidth share percentage" -msgstr "" +msgstr "Mise à jour du pourcentage de bande passante partagée" #: src/net/i2p/router/web/ConfigNetHandler.java:363 msgid "Updated bandwidth limits" @@ -1557,7 +1557,7 @@ msgstr "Pair" #: src/net/i2p/router/web/ConfigPeerHandler.java:24 msgid "banned until restart" -msgstr "" +msgstr "interdit jusqu'au rédémarrage" #: src/net/i2p/router/web/ConfigPeerHandler.java:27 #: src/net/i2p/router/web/ConfigPeerHandler.java:38 @@ -1567,11 +1567,11 @@ msgstr "Pair pas valable" #: src/net/i2p/router/web/ConfigPeerHandler.java:33 msgid "unbanned" -msgstr "" +msgstr "plus interdit" #: src/net/i2p/router/web/ConfigPeerHandler.java:35 msgid "is not currently banned" -msgstr "" +msgstr "n'est pas actuellement interdit" #: src/net/i2p/router/web/ConfigPeerHandler.java:47 msgid "Bad speed value" @@ -1613,11 +1613,11 @@ msgstr "Redémarrage en {0}" #: src/net/i2p/router/web/ConfigServiceHandler.java:56 msgid "Graceful shutdown initiated" -msgstr "" +msgstr "Fermature gracieuse initiée" #: src/net/i2p/router/web/ConfigServiceHandler.java:60 msgid "Shutdown immediately! boom bye bye bad bwoy" -msgstr "" +msgstr "Fermer immédiatement !" #: src/net/i2p/router/web/ConfigServiceHandler.java:63 msgid "Graceful shutdown cancelled" @@ -1703,7 +1703,7 @@ msgstr "" #: src/net/i2p/router/web/ConfigTunnelsHandler.java:142 msgid "Exploratory tunnel configuration saved successfully." -msgstr "" +msgstr "Configuration du tunnel exploratoire a été sauvegardé avec succès." #: src/net/i2p/router/web/ConfigTunnelsHandler.java:144 #: src/net/i2p/router/web/ConfigUIHandler.java:36 @@ -1818,11 +1818,11 @@ msgstr "Suédois" #: src/net/i2p/router/web/ConfigUpdateHandler.java:63 msgid "Update available, attempting to download now" -msgstr "" +msgstr "Mise à jour disponible, en tentant de la télécharger actuellement" #: src/net/i2p/router/web/ConfigUpdateHandler.java:65 msgid "Update available, click button on left to download" -msgstr "" +msgstr "Mise à jour disponible, cliquez sur le bouton sur la gauche pour la télécharger" #: src/net/i2p/router/web/ConfigUpdateHandler.java:67 msgid "No update available" @@ -2439,23 +2439,23 @@ msgstr "" #: src/net/i2p/router/web/SummaryHelper.java:104 msgid "ERR-Private TCP Address" -msgstr "" +msgstr "ERR - Adresse TCP privée" #: src/net/i2p/router/web/SummaryHelper.java:106 msgid "ERR-SymmetricNAT" -msgstr "" +msgstr "ERR - NAT symétrique" #: src/net/i2p/router/web/SummaryHelper.java:109 msgid "WARN-Firewalled with Inbound TCP Enabled" -msgstr "" +msgstr "WARN - pare-feu avec TCP entrant activé" #: src/net/i2p/router/web/SummaryHelper.java:111 msgid "WARN-Firewalled and Floodfill" -msgstr "" +msgstr "WARN - Pare-feu et Floodfill" #: src/net/i2p/router/web/SummaryHelper.java:113 msgid "WARN-Firewalled and Fast" -msgstr "" +msgstr "WARN - Pare-feu et Rapide" #: src/net/i2p/router/web/SummaryHelper.java:116 msgid "ERR-UDP Port In Use - Set i2np.udp.internalPort=xxxx in advanced config and restart" @@ -2467,7 +2467,7 @@ msgstr "" #: src/net/i2p/router/web/SummaryHelper.java:125 msgid "WARN-Firewalled with UDP Disabled" -msgstr "" +msgstr "WARN - Pare-feu avec UDP desactivé" #: src/net/i2p/router/web/SummaryHelper.java:360 msgid "Add/remove/edit & control your client and server tunnels" diff --git a/apps/routerconsole/locale/messages_ru.po b/apps/routerconsole/locale/messages_ru.po index 684fa78b9..f77d7852e 100644 --- a/apps/routerconsole/locale/messages_ru.po +++ b/apps/routerconsole/locale/messages_ru.po @@ -8,1668 +8,1413 @@ msgid "" msgstr "" "Project-Id-Version: I2P routerconsole\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-12 18:10+0000\n" -"PO-Revision-Date: 2009-12-12 20:14+0300\n" -"Last-Translator: Russian Sponsor \n" +"POT-Creation-Date: 2010-01-18 18:36+0000\n" +"PO-Revision-Date: 2010-01-18 18:37+0000\n" +"Last-Translator: 4get \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: Russian\n" +"X-Poedit-Bookmarks: 283,-1,-1,-1,-1,-1,-1,-1,-1,-1\n" #: ../../../router/java/src/net/i2p/router/Blocklist.java:117 -#, fuzzy, java-format +#, java-format msgid "Banned by router hash: {0}" -msgstr "Забанен маршрутизатора хэш: {0}" +msgstr "Забанен по хэшу маршрутизатора: {0}" #: ../../../router/java/src/net/i2p/router/Blocklist.java:119 -#, fuzzy msgid "Banned by router hash" -msgstr "Забанен маршрутизатора хэш" +msgstr "Забанен по хэшу маршрутизатора" #: ../../../router/java/src/net/i2p/router/Blocklist.java:664 -#, fuzzy msgid "IP banned" -msgstr "IP запрещен" +msgstr "IP заблокирован" #: ../../../router/java/src/net/i2p/router/Blocklist.java:734 -#, fuzzy, java-format +#, java-format msgid "IP banned by blocklist.txt entry {0}" -msgstr "IP запрещен в blocklist.txt этой записей {0}" +msgstr "IP заблокирован по записи в blocklist.txt: {0}" #: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:91 -#, fuzzy msgid "Rejecting tunnels: Shutting down" -msgstr "Отвергая туннели: Выключение" +msgstr "Не принимаем туннели: Маршрутизатор в процессе остановки" #: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:140 -#, fuzzy msgid "Rejecting tunnels: High message delay" -msgstr "Отвергая туннели: Высокая сообщения задержка" +msgstr "Не принимаем туннели: Слишком большая задержка сообщений" #: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:176 -#, fuzzy msgid "Rejecting most tunnels: High number of requests" -msgstr "Отвергая большинстве туннелей: Высокое число запросов" +msgstr "Не принимаем большую часть туннелей: Слишком много запросов" #: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:232 -#, fuzzy msgid "Rejecting tunnels: Limit reached" -msgstr "Отвергая туннелей: дошел до предела" +msgstr "Не принимаем туннели: Достигнут предел количества туннелей" #: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:300 -#, fuzzy msgid "Rejecting tunnels: Bandwidth limit" -msgstr "Отвергая туннели: ограничить пропускную способность" +msgstr "Не принимаем туннели: Достигнут предел пропускной способности" #: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:370 -#, fuzzy msgid "Rejecting most tunnels: Bandwidth limit" -msgstr "Отвергая наиболее туннели: ограничить пропускную способность" +msgstr "Не принимаем большую часть туннелей: Достигнут предел пропускной способности" #: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:374 -#, fuzzy msgid "Accepting most tunnels" -msgstr "Принимая большинство туннели" +msgstr "Принимаем большую часть туннелей" #: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:376 -#, fuzzy msgid "Accepting tunnels" -msgstr "Принимая туннелей" +msgstr "Принимаем туннели" #: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:486 -#, fuzzy msgid "Rejecting tunnels" -msgstr "Отвергая туннелей" +msgstr "Не принимаем туннели" #: ../../../router/java/src/net/i2p/router/transport/GetBidsJob.java:70 -#, fuzzy msgid "No transports (hidden or starting up?)" -msgstr "Нет транспорты (скрытой или начинать?)" +msgstr "Нет транспортных протоколов (в скрытом режиме или запущен недавно?)" #: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:450 -#, fuzzy msgid "Unreachable on any transport" -msgstr "Недоступные на любом транспорте" +msgstr "Недоступен по всем транспортным протоколам" #: ../../../router/java/src/net/i2p/router/transport/ntcp/EstablishState.java:373 #: ../../../router/java/src/net/i2p/router/transport/ntcp/EstablishState.java:578 -#, fuzzy, java-format +#, java-format msgid "Excessive clock skew: {0}" -msgstr "Чрезмерное часы не совпадающие по времени: {0}" +msgstr "Чрезмерное расхождение времени: {0}" -#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:128 -#, fuzzy +#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:137 msgid "Dropping tunnel requests: Too slow" -msgstr "Удаление туннель просит: слишком медленный" +msgstr "Игнорируем запросы туннелей: Время выполнения превысило ожидаемое" -#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:340 -#, fuzzy +#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:354 msgid "Dropping tunnel requests: Overloaded" -msgstr "Удаление туннель просит: Перегруженный" +msgstr "Игнорируем запросы туннелей: Слишком высокая нагрузка" -#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:499 -#, fuzzy +#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:521 msgid "Rejecting tunnels: Request overload" -msgstr "Отвергая туннелей: Запрос перегрузки" +msgstr "Не принимаем туннели: Слишком много запросов" -#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:524 -#, fuzzy +#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:546 msgid "Rejecting tunnels: Connection limit" -msgstr "Отвергая туннелей: Подключение к пределу" +msgstr "Не принимаем туннели: Достигнут предел количества соединений" -#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:725 -#, fuzzy +#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:748 msgid "Dropping tunnel requests: High load" -msgstr "Удаление туннель просит: Высокие нагрузки" +msgstr "Игнорируем запросы туннелей: Высокая нагрузка" -#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:734 -#, fuzzy +#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:757 msgid "Dropping tunnel requests: Queue time" -msgstr "Удаление туннель просит: Очередь время" +msgstr "Игнорируем запросы туннелей: Слишком большое время пребывания в очереди" #: ../java/build/Countries.java:3 -#, fuzzy msgid "Andorra" msgstr "Андорра" #: ../java/build/Countries.java:4 -#, fuzzy msgid "United Arab Emirates" msgstr "Объединенные Арабские Эмираты" #: ../java/build/Countries.java:5 -#, fuzzy msgid "Afghanistan" msgstr "Афганистан" #: ../java/build/Countries.java:6 -#, fuzzy msgid "Antigua and Barbuda" msgstr "Антигуа и Барбуда" #: ../java/build/Countries.java:7 -#, fuzzy msgid "Anguilla" msgstr "Ангилья" #: ../java/build/Countries.java:8 -#, fuzzy msgid "Albania" msgstr "Албания" #: ../java/build/Countries.java:9 -#, fuzzy msgid "Armenia" msgstr "Армения" #: ../java/build/Countries.java:10 -#, fuzzy msgid "Netherlands Antilles" msgstr "Нидерландские Антильские острова" #: ../java/build/Countries.java:11 -#, fuzzy msgid "Angola" msgstr "Ангола" #: ../java/build/Countries.java:12 -#, fuzzy msgid "Antarctica" msgstr "Антарктида" #: ../java/build/Countries.java:13 -#, fuzzy msgid "Argentina" msgstr "Аргентина" #: ../java/build/Countries.java:14 -#, fuzzy msgid "American Samoa" msgstr "Американское Самоа" #: ../java/build/Countries.java:15 -#, fuzzy msgid "Austria" msgstr "Австрия" #: ../java/build/Countries.java:16 -#, fuzzy msgid "Australia" msgstr "Австралия" #: ../java/build/Countries.java:17 -#, fuzzy msgid "Aruba" msgstr "Аруба" #: ../java/build/Countries.java:19 -#, fuzzy msgid "Azerbaijan" msgstr "Азербайджан" #: ../java/build/Countries.java:20 -#, fuzzy msgid "Bosnia and Herzegovina" msgstr "Босния и Герцеговина" #: ../java/build/Countries.java:21 -#, fuzzy msgid "Barbados" msgstr "Барбадос" #: ../java/build/Countries.java:22 -#, fuzzy msgid "Bangladesh" msgstr "Бангладеш" #: ../java/build/Countries.java:23 -#, fuzzy msgid "Belgium" msgstr "Бельгия" #: ../java/build/Countries.java:24 -#, fuzzy msgid "Burkina Faso" msgstr "Буркина-Фасо" #: ../java/build/Countries.java:25 -#, fuzzy msgid "Bulgaria" msgstr "Болгария" #: ../java/build/Countries.java:26 -#, fuzzy msgid "Bahrain" msgstr "Бахрейн" #: ../java/build/Countries.java:27 -#, fuzzy msgid "Burundi" msgstr "Бурунди" #: ../java/build/Countries.java:28 -#, fuzzy msgid "Benin" msgstr "Бенин" #: ../java/build/Countries.java:29 -#, fuzzy msgid "Bermuda" msgstr "Бермудские Острова" #: ../java/build/Countries.java:30 -#, fuzzy msgid "Brunei Darussalam" msgstr "Бруней-Даруссалам" #: ../java/build/Countries.java:31 -#, fuzzy msgid "Bolivia" msgstr "Боливия" #: ../java/build/Countries.java:32 -#, fuzzy msgid "Brazil" msgstr "Бразилия" #: ../java/build/Countries.java:33 -#, fuzzy msgid "Bahamas" msgstr "Багамские острова" #: ../java/build/Countries.java:34 -#, fuzzy msgid "Bhutan" msgstr "Бутан" #: ../java/build/Countries.java:35 -#, fuzzy msgid "Bouvet Island" msgstr "Остров Буве" #: ../java/build/Countries.java:36 -#, fuzzy msgid "Botswana" msgstr "Ботсвана" #: ../java/build/Countries.java:37 -#, fuzzy msgid "Belarus" msgstr "Беларусь" #: ../java/build/Countries.java:38 -#, fuzzy msgid "Belize" msgstr "Белиз" #: ../java/build/Countries.java:39 -#, fuzzy msgid "Canada" msgstr "Канада" #: ../java/build/Countries.java:40 -#, fuzzy msgid "The Democratic Republic of the Congo" msgstr "Демократическая Республика Конго" #: ../java/build/Countries.java:41 -#, fuzzy msgid "Central African Republic" msgstr "Центральноафриканская Республика" #: ../java/build/Countries.java:42 -#, fuzzy msgid "Congo" msgstr "Конго" #: ../java/build/Countries.java:43 -#, fuzzy msgid "Switzerland" msgstr "Швейцария" #: ../java/build/Countries.java:44 -#, fuzzy msgid "Cote D'Ivoire" msgstr "Кот-д'Ивуар" #: ../java/build/Countries.java:45 -#, fuzzy msgid "Cook Islands" msgstr "Острова Кука" #: ../java/build/Countries.java:46 -#, fuzzy msgid "Chile" msgstr "Чили" #: ../java/build/Countries.java:47 -#, fuzzy msgid "Cameroon" msgstr "Камерун" #: ../java/build/Countries.java:48 -#, fuzzy msgid "China" msgstr "Китай" #: ../java/build/Countries.java:49 -#, fuzzy msgid "Colombia" msgstr "Колумбия" #: ../java/build/Countries.java:50 -#, fuzzy msgid "Costa Rica" msgstr "Коста-Рика" #: ../java/build/Countries.java:51 -#, fuzzy msgid "Serbia and Montenegro" msgstr "Сербия и Черногория" #: ../java/build/Countries.java:52 -#, fuzzy msgid "Cuba" msgstr "Куба" #: ../java/build/Countries.java:53 -#, fuzzy msgid "Cape Verde" msgstr "Кабо-Верде" #: ../java/build/Countries.java:54 -#, fuzzy msgid "Cyprus" msgstr "Кипр" #: ../java/build/Countries.java:55 -#, fuzzy msgid "Czech Republic" msgstr "Чехия" #: ../java/build/Countries.java:56 -#, fuzzy msgid "Germany" msgstr "Германия" #: ../java/build/Countries.java:57 -#, fuzzy msgid "Djibouti" msgstr "Джибути" #: ../java/build/Countries.java:58 -#, fuzzy msgid "Denmark" msgstr "Дания" #: ../java/build/Countries.java:59 -#, fuzzy msgid "Dominica" msgstr "Доминика" #: ../java/build/Countries.java:60 -#, fuzzy msgid "Dominican Republic" msgstr "Доминиканская Республика" #: ../java/build/Countries.java:61 -#, fuzzy msgid "Algeria" msgstr "Алжир" #: ../java/build/Countries.java:62 -#, fuzzy msgid "Ecuador" msgstr "Эквадор" #: ../java/build/Countries.java:63 -#, fuzzy msgid "Estonia" msgstr "Эстония" #: ../java/build/Countries.java:64 -#, fuzzy msgid "Egypt" msgstr "Египет" #: ../java/build/Countries.java:65 -#, fuzzy msgid "Eritrea" msgstr "Эритрея" #: ../java/build/Countries.java:66 -#, fuzzy msgid "Spain" msgstr "Испания" #: ../java/build/Countries.java:67 -#, fuzzy msgid "Ethiopia" msgstr "Эфиопия" #: ../java/build/Countries.java:68 -#, fuzzy msgid "Finland" msgstr "Финляндия" #: ../java/build/Countries.java:69 -#, fuzzy msgid "Fiji" msgstr "Фиджи" #: ../java/build/Countries.java:70 -#, fuzzy msgid "Falkland Islands (Malvinas)" -msgstr "Фолклендские (Мальвинские)" +msgstr "Фолклендские (Мальвинские) острова" #: ../java/build/Countries.java:71 -#, fuzzy msgid "Federated States of Micronesia" msgstr "Федеративные Штаты Микронезии" #: ../java/build/Countries.java:72 -#, fuzzy msgid "Faroe Islands" msgstr "Фарерские острова" #: ../java/build/Countries.java:73 -#, fuzzy msgid "France" msgstr "Франция" #: ../java/build/Countries.java:74 -#, fuzzy msgid "Gabon" msgstr "Габон" #: ../java/build/Countries.java:75 -#, fuzzy msgid "United Kingdom" msgstr "Великобритания" #: ../java/build/Countries.java:76 -#, fuzzy msgid "Grenada" msgstr "Гренада" #: ../java/build/Countries.java:77 -#, fuzzy msgid "Georgia" msgstr "Грузия" #: ../java/build/Countries.java:78 -#, fuzzy msgid "French Guiana" msgstr "Французская Гвиана" #: ../java/build/Countries.java:79 -#, fuzzy msgid "Ghana" msgstr "Гана" #: ../java/build/Countries.java:80 -#, fuzzy msgid "Gibraltar" msgstr "Гибралтар" #: ../java/build/Countries.java:81 -#, fuzzy msgid "Greenland" msgstr "Гренландия" #: ../java/build/Countries.java:82 -#, fuzzy msgid "Gambia" msgstr "Гамбия" #: ../java/build/Countries.java:83 -#, fuzzy msgid "Guinea" msgstr "Гвинея" #: ../java/build/Countries.java:84 -#, fuzzy msgid "Guadeloupe" msgstr "Гваделупа" #: ../java/build/Countries.java:85 -#, fuzzy msgid "Equatorial Guinea" msgstr "Экваториальная Гвинея" #: ../java/build/Countries.java:86 -#, fuzzy msgid "Greece" msgstr "Греция" #: ../java/build/Countries.java:87 -#, fuzzy msgid "South Georgia and the South Sandwich Islands" msgstr "Южная Джорджия и Южные Сандвичевы Острова" #: ../java/build/Countries.java:88 -#, fuzzy msgid "Guatemala" msgstr "Гватемала" #: ../java/build/Countries.java:89 -#, fuzzy msgid "Guam" msgstr "Гуам" #: ../java/build/Countries.java:90 -#, fuzzy msgid "Guinea-Bissau" msgstr "Гвинея-Бисау" #: ../java/build/Countries.java:91 -#, fuzzy msgid "Guyana" msgstr "Гайана" #: ../java/build/Countries.java:92 -#, fuzzy msgid "Hong Kong" msgstr "Гонконг" #: ../java/build/Countries.java:93 -#, fuzzy msgid "Honduras" msgstr "Гондурас" #: ../java/build/Countries.java:94 -#, fuzzy msgid "Croatia" msgstr "Хорватия" #: ../java/build/Countries.java:95 -#, fuzzy msgid "Haiti" msgstr "Гаити" #: ../java/build/Countries.java:96 -#, fuzzy msgid "Hungary" msgstr "Венгрия" #: ../java/build/Countries.java:97 -#, fuzzy msgid "Indonesia" msgstr "Индонезия" #: ../java/build/Countries.java:98 -#, fuzzy msgid "Ireland" msgstr "Ирландия" #: ../java/build/Countries.java:99 -#, fuzzy msgid "Israel" msgstr "Израиль" #: ../java/build/Countries.java:101 -#, fuzzy msgid "India" msgstr "Индия" #: ../java/build/Countries.java:102 -#, fuzzy msgid "British Indian Ocean Territory" msgstr "Британская территория в Индийском океане" #: ../java/build/Countries.java:103 -#, fuzzy msgid "Iraq" msgstr "Ирак" #: ../java/build/Countries.java:104 -#, fuzzy msgid "Islamic Republic of Iran" msgstr "Исламская Республика Иран" #: ../java/build/Countries.java:105 -#, fuzzy msgid "Iceland" msgstr "Исландия" #: ../java/build/Countries.java:106 -#, fuzzy msgid "Italy" msgstr "Италия" #: ../java/build/Countries.java:108 -#, fuzzy msgid "Jamaica" msgstr "Ямайка" #: ../java/build/Countries.java:109 -#, fuzzy msgid "Jordan" msgstr "Иордания" #: ../java/build/Countries.java:110 -#, fuzzy msgid "Japan" msgstr "Япония" #: ../java/build/Countries.java:111 -#, fuzzy msgid "Kenya" msgstr "Кения" #: ../java/build/Countries.java:112 -#, fuzzy msgid "Kyrgyzstan" msgstr "Кыргызстан" #: ../java/build/Countries.java:113 -#, fuzzy msgid "Cambodia" msgstr "Камбоджа" #: ../java/build/Countries.java:114 -#, fuzzy msgid "Kiribati" msgstr "Кирибати" #: ../java/build/Countries.java:115 -#, fuzzy msgid "Comoros" msgstr "Коморские Острова" #: ../java/build/Countries.java:116 -#, fuzzy msgid "Saint Kitts and Nevis" msgstr "Сент-Китс и Невис" #: ../java/build/Countries.java:117 -#, fuzzy msgid "Republic of Korea" msgstr "Республика Корея" #: ../java/build/Countries.java:118 -#, fuzzy msgid "Kuwait" msgstr "Кувейт" #: ../java/build/Countries.java:119 -#, fuzzy msgid "Cayman Islands" msgstr "Каймановы острова" #: ../java/build/Countries.java:120 -#, fuzzy msgid "Kazakhstan" msgstr "Казахстан" #: ../java/build/Countries.java:121 -#, fuzzy msgid "Lao People's Democratic Republic" msgstr "Лаосская Народно-Демократическая Республика" #: ../java/build/Countries.java:122 -#, fuzzy msgid "Lebanon" msgstr "Ливан" #: ../java/build/Countries.java:123 -#, fuzzy msgid "Saint Lucia" msgstr "Сент-Люсия" #: ../java/build/Countries.java:124 -#, fuzzy msgid "Liechtenstein" msgstr "Лихтенштейн" #: ../java/build/Countries.java:125 -#, fuzzy msgid "Sri Lanka" msgstr "Шри-Ланка" #: ../java/build/Countries.java:126 -#, fuzzy msgid "Liberia" msgstr "Либерия" #: ../java/build/Countries.java:127 -#, fuzzy msgid "Lesotho" msgstr "Лесото" #: ../java/build/Countries.java:128 -#, fuzzy msgid "Lithuania" msgstr "Литва" #: ../java/build/Countries.java:129 -#, fuzzy msgid "Luxembourg" msgstr "Люксембург" #: ../java/build/Countries.java:130 -#, fuzzy msgid "Latvia" msgstr "Латвия" #: ../java/build/Countries.java:131 -#, fuzzy msgid "Libyan Arab Jamahiriya" msgstr "Ливийская Арабская Джамахирия" #: ../java/build/Countries.java:132 -#, fuzzy msgid "Morocco" msgstr "Марокко" #: ../java/build/Countries.java:133 -#, fuzzy msgid "Monaco" msgstr "Монако" #: ../java/build/Countries.java:134 -#, fuzzy msgid "Republic of Moldova" msgstr "Республика Молдова" #: ../java/build/Countries.java:137 -#, fuzzy msgid "Madagascar" msgstr "Мадагаскар" #: ../java/build/Countries.java:138 -#, fuzzy msgid "Marshall Islands" msgstr "Маршалловы Острова" #: ../java/build/Countries.java:139 -#, fuzzy msgid "The Former Yugoslav Republic of Macedonia" msgstr "Бывшая югославская Республика Македония" #: ../java/build/Countries.java:140 -#, fuzzy msgid "Mali" msgstr "Мали" #: ../java/build/Countries.java:141 -#, fuzzy msgid "Myanmar" msgstr "Мьянма" #: ../java/build/Countries.java:142 -#, fuzzy msgid "Mongolia" msgstr "Монголия" #: ../java/build/Countries.java:143 -#, fuzzy msgid "Macao" msgstr "Макао" #: ../java/build/Countries.java:144 -#, fuzzy msgid "Northern Mariana Islands" -msgstr "Северные Марианские о-ва" +msgstr "Северные Марианские острова" #: ../java/build/Countries.java:145 -#, fuzzy msgid "Martinique" msgstr "Мартиника" #: ../java/build/Countries.java:146 -#, fuzzy msgid "Mauritania" msgstr "Мавритания" #: ../java/build/Countries.java:147 -#, fuzzy msgid "Montserrat" msgstr "Монтсеррат" #: ../java/build/Countries.java:148 -#, fuzzy msgid "Malta" msgstr "Мальта" #: ../java/build/Countries.java:149 -#, fuzzy msgid "Mauritius" msgstr "Маврикий" #: ../java/build/Countries.java:150 -#, fuzzy msgid "Maldives" msgstr "Мальдивы" #: ../java/build/Countries.java:151 -#, fuzzy msgid "Malawi" msgstr "Малави" #: ../java/build/Countries.java:152 -#, fuzzy msgid "Mexico" msgstr "Мексика" #: ../java/build/Countries.java:153 -#, fuzzy msgid "Malaysia" msgstr "Малайзия" #: ../java/build/Countries.java:154 -#, fuzzy msgid "Mozambique" msgstr "Мозамбик" #: ../java/build/Countries.java:155 -#, fuzzy msgid "Namibia" -msgstr "Мозамбик" +msgstr "Намибия" #: ../java/build/Countries.java:156 -#, fuzzy msgid "New Caledonia" msgstr "Новая Каледония" #: ../java/build/Countries.java:157 -#, fuzzy msgid "Niger" msgstr "Нигер" #: ../java/build/Countries.java:158 -#, fuzzy msgid "Norfolk Island" msgstr "Остров Норфолк" #: ../java/build/Countries.java:159 -#, fuzzy msgid "Nigeria" msgstr "Нигерия" #: ../java/build/Countries.java:160 -#, fuzzy msgid "Nicaragua" msgstr "Никарагуа" #: ../java/build/Countries.java:161 -#, fuzzy msgid "Netherlands" msgstr "Нидерланды" #: ../java/build/Countries.java:162 -#, fuzzy msgid "Norway" msgstr "Норвегия" #: ../java/build/Countries.java:163 -#, fuzzy msgid "Nepal" msgstr "Непал" #: ../java/build/Countries.java:164 -#, fuzzy msgid "Nauru" msgstr "Науру" #: ../java/build/Countries.java:165 -#, fuzzy msgid "Niue" msgstr "Ниуэ" #: ../java/build/Countries.java:166 -#, fuzzy msgid "New Zealand" msgstr "Новая Зеландия" #: ../java/build/Countries.java:167 -#, fuzzy msgid "Oman" msgstr "Оман" #: ../java/build/Countries.java:168 -#, fuzzy msgid "Panama" msgstr "Панама" #: ../java/build/Countries.java:169 -#, fuzzy msgid "Peru" msgstr "Перу" #: ../java/build/Countries.java:170 -#, fuzzy msgid "French Polynesia" msgstr "Французская Полинезия" #: ../java/build/Countries.java:171 -#, fuzzy msgid "Papua New Guinea" -msgstr "Папуа-Новая Гвинея" +msgstr "Папуа - Новая Гвинея" #: ../java/build/Countries.java:172 -#, fuzzy msgid "Philippines" msgstr "Филиппины" #: ../java/build/Countries.java:173 -#, fuzzy msgid "Pakistan" msgstr "Пакистан" #: ../java/build/Countries.java:174 -#, fuzzy msgid "Poland" msgstr "Польша" #: ../java/build/Countries.java:175 -#, fuzzy msgid "Saint Pierre and Miquelon" msgstr "Сен-Пьер и Микелон" #: ../java/build/Countries.java:176 -#, fuzzy msgid "Puerto Rico" msgstr "Пуэрто-Рико" #: ../java/build/Countries.java:177 -#, fuzzy msgid "Palestinian Territory" msgstr "Палестинская автономия" #: ../java/build/Countries.java:178 -#, fuzzy msgid "Portugal" msgstr "Португалия" #: ../java/build/Countries.java:179 -#, fuzzy msgid "Palau" msgstr "Палау" #: ../java/build/Countries.java:180 -#, fuzzy msgid "Paraguay" msgstr "Парагвай" #: ../java/build/Countries.java:181 -#, fuzzy msgid "Qatar" msgstr "Катар" #: ../java/build/Countries.java:182 -#, fuzzy msgid "Reunion" msgstr "Реюньон" #: ../java/build/Countries.java:183 -#, fuzzy msgid "Romania" msgstr "Румыния" #: ../java/build/Countries.java:184 -#, fuzzy msgid "Serbia" msgstr "Сербия" #: ../java/build/Countries.java:185 -#, fuzzy msgid "Russian Federation" -msgstr "Русская Федерация" +msgstr "Российская Федерация" #: ../java/build/Countries.java:186 -#, fuzzy msgid "Rwanda" msgstr "Руанда" #: ../java/build/Countries.java:187 -#, fuzzy msgid "Saudi Arabia" msgstr "Саудовская Аравия" #: ../java/build/Countries.java:188 -#, fuzzy msgid "Solomon Islands" msgstr "Соломоновы Острова" #: ../java/build/Countries.java:189 -#, fuzzy msgid "Seychelles" msgstr "Сейшельские Острова" #: ../java/build/Countries.java:190 -#, fuzzy msgid "Sudan" msgstr "Судан" #: ../java/build/Countries.java:191 -#, fuzzy msgid "Sweden" msgstr "Швеция" #: ../java/build/Countries.java:192 -#, fuzzy msgid "Singapore" msgstr "Сингапур" #: ../java/build/Countries.java:193 -#, fuzzy msgid "Slovenia" msgstr "Словения" #: ../java/build/Countries.java:194 -#, fuzzy msgid "Slovakia" msgstr "Словакия" #: ../java/build/Countries.java:195 -#, fuzzy msgid "Sierra Leone" msgstr "Сьерра-Леоне" #: ../java/build/Countries.java:196 -#, fuzzy msgid "San Marino" -msgstr "Сан - Марине" +msgstr "Сан-Марино" #: ../java/build/Countries.java:197 -#, fuzzy msgid "Senegal" msgstr "Сенегал" #: ../java/build/Countries.java:198 -#, fuzzy msgid "Somalia" msgstr "Сомали" #: ../java/build/Countries.java:199 -#, fuzzy msgid "Suriname" msgstr "Суринам" #: ../java/build/Countries.java:200 -#, fuzzy msgid "Sao Tome and Principe" msgstr "Сан-Томе и Принсипи" #: ../java/build/Countries.java:201 -#, fuzzy msgid "El Salvador" msgstr "Сальвадор" #: ../java/build/Countries.java:202 -#, fuzzy msgid "Syrian Arab Republic" msgstr "Сирийская Арабская Республика" #: ../java/build/Countries.java:203 -#, fuzzy msgid "Swaziland" msgstr "Свазиленд" #: ../java/build/Countries.java:204 -#, fuzzy msgid "Turks and Caicos Islands" msgstr "Острова Теркс и Кайкос" #: ../java/build/Countries.java:205 -#, fuzzy msgid "Chad" msgstr "Чад" #: ../java/build/Countries.java:206 -#, fuzzy msgid "French Southern Territories" msgstr "Французские Южные Территории" #: ../java/build/Countries.java:207 -#, fuzzy msgid "Togo" msgstr "Того" #: ../java/build/Countries.java:208 -#, fuzzy msgid "Thailand" msgstr "Таиланд" #: ../java/build/Countries.java:209 -#, fuzzy msgid "Tajikistan" msgstr "Таджикистан" #: ../java/build/Countries.java:210 -#, fuzzy msgid "Tokelau" msgstr "Токелау" #: ../java/build/Countries.java:211 -#, fuzzy msgid "Timor-Leste" msgstr "Восточный Тимор" #: ../java/build/Countries.java:212 -#, fuzzy msgid "Turkmenistan" msgstr "Туркменистан" #: ../java/build/Countries.java:213 -#, fuzzy msgid "Tunisia" msgstr "Тунис" #: ../java/build/Countries.java:214 -#, fuzzy msgid "Tonga" msgstr "Тонга" #: ../java/build/Countries.java:215 -#, fuzzy msgid "Turkey" msgstr "Турция" #: ../java/build/Countries.java:216 -#, fuzzy msgid "Trinidad and Tobago" msgstr "Тринидад и Тобаго" #: ../java/build/Countries.java:217 -#, fuzzy msgid "Tuvalu" msgstr "Тувалу" #: ../java/build/Countries.java:218 -#, fuzzy msgid "Taiwan" msgstr "Тайвань" #: ../java/build/Countries.java:219 -#, fuzzy msgid "United Republic of Tanzania" -msgstr "Объединенная Республика Танзания" +msgstr "Объединённая Республика Танзания" #: ../java/build/Countries.java:220 -#, fuzzy msgid "Ukraine" msgstr "Украина" #: ../java/build/Countries.java:221 -#, fuzzy msgid "Uganda" msgstr "Уганда" #: ../java/build/Countries.java:222 -#, fuzzy msgid "United States Minor Outlying Islands" msgstr "Внешние малые острова (США)" #: ../java/build/Countries.java:223 -#, fuzzy msgid "United States" -msgstr "Соединенные Штаты Америки" +msgstr "Соединённые Штаты Америки" #: ../java/build/Countries.java:224 -#, fuzzy msgid "Uruguay" msgstr "Уругвай" #: ../java/build/Countries.java:225 -#, fuzzy msgid "Uzbekistan" msgstr "Узбекистан" #: ../java/build/Countries.java:226 -#, fuzzy msgid "Holy See (Vatican City State)" msgstr "Святой Престол (Ватикан)" #: ../java/build/Countries.java:227 -#, fuzzy msgid "Saint Vincent and the Grenadines" msgstr "Сент-Винсент и Гренадины" #: ../java/build/Countries.java:228 -#, fuzzy msgid "Venezuela" msgstr "Венесуэла" #: ../java/build/Countries.java:229 #: ../java/build/Countries.java:230 -#, fuzzy msgid "Virgin Islands" msgstr "Виргинские острова" #: ../java/build/Countries.java:231 -#, fuzzy msgid "Viet Nam" msgstr "Вьетнам" #: ../java/build/Countries.java:232 -#, fuzzy msgid "Vanuatu" msgstr "Вануату" #: ../java/build/Countries.java:233 -#, fuzzy msgid "Wallis and Futuna" msgstr "Уоллис и Футуна" #: ../java/build/Countries.java:234 -#, fuzzy msgid "Samoa" msgstr "Самоа" #: ../java/build/Countries.java:235 -#, fuzzy msgid "Yemen" msgstr "Йемен" #: ../java/build/Countries.java:236 -#, fuzzy msgid "Mayotte" msgstr "Майотта" #: ../java/build/Countries.java:237 -#, fuzzy msgid "South Africa" msgstr "Южная Африка" #: ../java/build/Countries.java:238 -#, fuzzy msgid "Zambia" msgstr "Замбия" #: ../java/build/Countries.java:239 -#, fuzzy msgid "Zimbabwe" msgstr "Зимбабве" -#: ../java/src/net/i2p/router/web/CSSHelper.java:41 +#: ../java/src/net/i2p/router/web/CSSHelper.java:54 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:30 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:32 #: ../java/strings/Strings.java:29 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/index_jsp.java:234 -#, fuzzy msgid "I2P Router Console" -msgstr "Консоль Маршрутизатора I2P" +msgstr "Консоль маршрутизатора I2P" #: ../java/src/net/i2p/router/web/ConfigAdvancedHandler.java:57 -#, fuzzy msgid "Error updating the configuration - please see the error logs" -msgstr "Ошибка при обновлении конфигурации - смотрите логи ошибок" +msgstr "Не удалось обновить настройки — загляните в журнал ошибок" #: ../java/src/net/i2p/router/web/ConfigAdvancedHandler.java:69 -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:251 -#, fuzzy +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:263 msgid "Configuration saved successfully" -msgstr "Конфигурация успешно сохранены" +msgstr "Настройки сохранены" #: ../java/src/net/i2p/router/web/ConfigAdvancedHandler.java:71 -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:253 -#, fuzzy +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:265 msgid "Error saving the configuration (applied but not saved) - please see the error logs" -msgstr "Ошибка при сохранении конфигурации (применяется, но не сохранили) - пожалуйста, смотрите логи ошибок" +msgstr "Не удалось сохранить настройки (применены, но не сохранены) — загляните в журнал ошибок" #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:32 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:321 -#, fuzzy +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:332 msgid "Save Client Configuration" -msgstr "Сохраните Настройки Клиента" +msgstr "Сохранить настройки клиентов" #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:36 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:333 -#, fuzzy +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:344 msgid "Save WebApp Configuration" -msgstr "Сохранять WebApp Конфигурацию" +msgstr "Сохранить настройки веб-апплетов" -#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:54 -#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:67 -#, fuzzy +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:66 +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:97 msgid "Start" -msgstr "Включать" +msgstr "Запустить" -#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:68 +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:80 #: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:49 -#, fuzzy msgid "Unsupported" -msgstr "Неподдерживаемый" - -#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:83 -#, fuzzy -msgid "Client configuration saved successfully - restart required to take effect." -msgstr "Настройка клиента успешно сохранены - Требуется перезагрузка вступили в силу." - -#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:89 -#, fuzzy -msgid "Bad client index." -msgstr "Индекс плохой клиент." +msgstr "Не поддерживается" +# This term intentionally left in English #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:94 -#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:17 -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:363 -#: ../java/src/net/i2p/router/web/SummaryHelper.java:371 -#, fuzzy +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:110 +msgid "desc" +msgstr "desc" + +# This term intentionally left in English +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:105 +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:120 +msgid "name" +msgstr "name" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:125 +msgid "New client added" +msgstr "Добавлен новый клиент" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:129 +msgid "Client configuration saved successfully - restart required to take effect." +msgstr "Настройки клиентов сохранены, требуется перезагрузка маршрутизатора для вступления в силу." + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:143 +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:154 +msgid "Bad client index." +msgstr "Индекс клиента не найден в списке." + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:148 +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:159 +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:36 +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:370 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:384 msgid "Client" msgstr "Клиент" -#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:94 -#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:129 -#, fuzzy +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:148 +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:194 msgid "started" -msgstr "началось" +msgstr "запущен" -#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:111 -#, fuzzy +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:159 +msgid "deleted" +msgstr "удален" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:176 msgid "WebApp configuration saved successfully - restart required to take effect." -msgstr "Конфигурация веб-приложений успешно сохранены - Требуется перезагрузка вступили в силу." +msgstr "Настройки веб-апплетов сохранены, требуется перезагрузка маршрутизатора для вступления в силу." -#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:129 -#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:34 -#, fuzzy +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:194 +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:55 msgid "WebApp" -msgstr "Веб-приложение" +msgstr "Веб-апплет" -#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:131 -#, fuzzy +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:196 msgid "Failed to start" -msgstr "Сбой при запуске" +msgstr "Не удалось запустить" -#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:137 -#, fuzzy +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:202 msgid "Failed to find server." msgstr "Не удалось найти сервер." -#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:17 -#, fuzzy +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:19 +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:100 +msgid "Edit" +msgstr "Редактировать" + +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:28 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:328 +msgid "Add Client" +msgstr "Добавить клиента" + +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:36 msgid "Class and arguments" -msgstr "Класс и параметры" +msgstr "Название класса и параметры" -#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:17 -#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:34 -#, fuzzy +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:36 +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:55 msgid "Run at Startup?" -msgstr "Запустить при следующем запуске системы?" +msgstr "Запускать автоматически?" -#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:17 -#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:34 -#, fuzzy +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:36 +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:55 msgid "Start Now" -msgstr "Запустить Cейчас" +msgstr "Запустить вручную" -#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:34 -#, fuzzy +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:55 msgid "Description" msgstr "Описание" +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:101 +msgid "Delete" +msgstr "Удалить" + #: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:18 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:320 -#, fuzzy msgid "Add key" msgstr "Добавить ключ" #: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:19 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:322 -#, fuzzy msgid "Delete key" msgstr "Удалить ключ" #: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:21 -#, fuzzy msgid "You must enter a destination" -msgstr "Вы должны ввести назначения" +msgstr "Вы должны ввести адрес назначения" #: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:23 -#, fuzzy msgid "You must enter a key" -msgstr "Вы должны ввести ключевые" +msgstr "Вы должны ввести ключ" #: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:34 #: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:41 #: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:43 -#, fuzzy msgid "Key for" msgstr "Ключ для" #: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:34 -#, fuzzy msgid "added to keyring" -msgstr "добавить в связку ключей" +msgstr "добавлен в связку ключей" #: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:36 -#, fuzzy msgid "Invalid destination or key" -msgstr "Invalid destination or key" +msgstr "Некорректный адрес назначения или ключ" #: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:41 -#, fuzzy msgid "removed from keyring" -msgstr "удалены из связку ключей" +msgstr "удален из связки ключей" #: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:43 -#, fuzzy msgid "not found in keyring" -msgstr "Не найдено в связку ключей" +msgstr "не найден в связке ключей" #: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:45 -#, fuzzy msgid "Invalid destination" -msgstr "Invalid destination" +msgstr "Некорректный адрес назначения" +#: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:46 +msgid "Add additional logging statements above. Example: net.i2p.router.tunnel=WARN" +msgstr "Впишите выше дополнительные настройки уровней детальности журнала. Пример: net.i2p.router.tunnel=WARN" + +#: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:47 +msgid "Or put entries in the logger.config file. Example: logger.record.net.i2p.router.tunnel=WARN" +msgstr "Либо добавьте эти записи в файл logger.config. Пример: logger.record.net.i2p.router.tunnel=WARN" + +#: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:48 +msgid "Valid levels are DEBUG, INFO, WARN, ERROR, CRIT" +msgstr "Поддерживаемые уровни: DEBUG, INFO, WARN, ERROR, CRIT" + +# This term intentionally left in English #: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:52 -#, fuzzy msgid "CRIT" -msgstr "КРИТИЧЕСКИЕ" +msgstr "CRIT" +# This term intentionally left in English #: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:52 -#, fuzzy msgid "DEBUG" -msgstr "ОТЛАДКА" +msgstr "DEBUG" +# This term intentionally left in English #: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:52 -#, fuzzy msgid "ERROR" -msgstr "ОШИБКА" +msgstr "ERROR" +# This term intentionally left in English #: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:52 -#, fuzzy msgid "INFO" -msgstr "ИНФОРМАЦИЯ" +msgstr "INFO" +# This term intentionally left in English #: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:52 -#, fuzzy msgid "WARN" -msgstr "ПРЕДУПРЕЖДЕНИЕ" +msgstr "WARN" #: ../java/src/net/i2p/router/web/ConfigNavHelper.java:18 -#, fuzzy msgid "Network" msgstr "Сеть" #: ../java/src/net/i2p/router/web/ConfigNavHelper.java:18 -#, fuzzy msgid "Service" -msgstr "Сервис" +msgstr "Служба" #: ../java/src/net/i2p/router/web/ConfigNavHelper.java:18 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:86 -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:253 -#, fuzzy +#: ../java/strings/Strings.java:72 msgid "Tunnels" msgstr "Туннели" #: ../java/src/net/i2p/router/web/ConfigNavHelper.java:18 -#, fuzzy msgid "UI" -msgstr "Интерфейс Пользователя" +msgstr "Интерфейс" #: ../java/src/net/i2p/router/web/ConfigNavHelper.java:18 -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:202 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:209 -#, fuzzy +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:216 msgid "Update" msgstr "Обновление" #: ../java/src/net/i2p/router/web/ConfigNavHelper.java:19 -#, fuzzy msgid "Clients" -msgstr "Клиенты" +msgstr "Апплеты" #: ../java/src/net/i2p/router/web/ConfigNavHelper.java:19 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:292 -#, fuzzy msgid "Keyring" -msgstr "Cвязку Kлючей" +msgstr "Ключи" #: ../java/src/net/i2p/router/web/ConfigNavHelper.java:19 -#, fuzzy msgid "Logging" -msgstr "Логи" +msgstr "Журнал" #: ../java/src/net/i2p/router/web/ConfigNavHelper.java:19 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:92 -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:227 -#, fuzzy +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:234 +#: ../java/strings/Strings.java:67 msgid "Peers" msgstr "Пиры" #: ../java/src/net/i2p/router/web/ConfigNavHelper.java:19 -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:293 +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:294 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:128 -#, fuzzy msgid "Stats" msgstr "Статистика" #: ../java/src/net/i2p/router/web/ConfigNavHelper.java:20 -#, fuzzy msgid "Advanced" -msgstr "Расширенный" +msgstr "Дополнительно" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:47 -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:249 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:48 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:261 #: ../java/src/net/i2p/router/web/ConfigTunnelsHandler.java:35 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:357 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:494 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:502 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:333 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:373 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:341 -#, fuzzy msgid "Save changes" -msgstr "Сохранить изменения" +msgstr "Сохранить настройки" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:119 -#, fuzzy +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:121 msgid "Rechecking router reachability..." -msgstr "Повторная проверка доступности маршрутизатора..." +msgstr "Перепроверяем доступность маршрутизатора..." -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:148 -#, fuzzy +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:150 msgid "Updating IP address" -msgstr "Обновление IP-адреса" +msgstr "Обновляем IP-адрес" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:166 -#, fuzzy +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:168 msgid "Disabling TCP completely" -msgstr "Отключение TCP полностью" +msgstr "Полностью отключаем использование TCP" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:170 -#, fuzzy +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:172 msgid "Updating inbound TCP address to" -msgstr "Обновление входящего в адрес TCP" - -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:174 -#, fuzzy -msgid "Disabling inbound TCP" -msgstr "Отключение входящие TCP" +msgstr "Адрес для входящих TCP соединений изменен на" #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:176 -#, fuzzy +msgid "Disabling inbound TCP" +msgstr "Отключаем использование TCP на вход" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:178 msgid "Updating inbound TCP address to auto" -msgstr "Обновление входящего адреса TCP автоматически" +msgstr "Адрес для входящих TCP соединений будет определяться автоматически" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:185 -#, fuzzy +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:187 msgid "Updating inbound TCP port to" -msgstr "Обновление входящего порта TCP для" +msgstr "Порт для входящих TCP соединений изменен на" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:188 -#, fuzzy +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:190 msgid "Updating inbound TCP port to auto" -msgstr "Обновление входящего порта TCP автоматически" +msgstr "Порт для входящих TCP соединений будет выбираться автоматически" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:200 -#, fuzzy +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:202 msgid "Updating UDP port from" -msgstr "Обновление от UDP порта" +msgstr "Порт для UDP соединений изменен с" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:200 -#, fuzzy +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:202 msgid "to" -msgstr "к" - -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:216 -#, fuzzy -msgid "Gracefully restarting into Hidden Router Mode" -msgstr "Правильно перезапуска в скрытые режиме маршрутизатора" +msgstr "на" #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:218 -#, fuzzy -msgid "Gracefully restarting to exit Hidden Router Mode" -msgstr "Правильно перезапуска для выхода Скрытый режим маршрутизатора" +msgid "Gracefully restarting into Hidden Router Mode" +msgstr "Плавная перезагрузка для перехода в скрытый режим" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:227 -#, fuzzy -msgid "Enabling UPnP, restart required to take effect" -msgstr "Включение UPnP, необходима перезагрузка вступили в силу" +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:220 +msgid "Gracefully restarting to exit Hidden Router Mode" +msgstr "Плавная перезагрузка для выхода из скрытого режима" #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:229 -#, fuzzy +msgid "Enabling UPnP, restart required to take effect" +msgstr "UPnP включен, необходима перезагрузка маршрутизатора" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:231 msgid "Disabling UPnP, restart required to take effect" -msgstr "Отключение UPnP, необходима перезагрузка вступили в силу" +msgstr "UPnP выключен, необходима перезагрузка маршрутизатора" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:235 -#, fuzzy +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:239 +msgid "Enabling laptop mode" +msgstr "Включение laptop mode" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:241 +msgid "Disabling laptop mode" +msgstr "Выключение laptop mode" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:247 msgid "Requiring SSU introducers" -msgstr "Требование SSU поручителями" +msgstr "Запрашиваем SSU-посредников" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:275 -#, fuzzy +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:288 msgid "Gracefully restarting I2P to change published router address" -msgstr "Правильно перезапуска I2P изменить опубликован адрес маршрутизатора" +msgstr "Плавная перезагрузка для изменения публикуемого адреса" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:293 -#, fuzzy +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:308 msgid "Updating bandwidth share percentage" -msgstr "Обновление пропускную процентной доли" +msgstr "Обновление доли транзитного трафика" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:363 -#, fuzzy +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:378 msgid "Updated bandwidth limits" -msgstr "Обновлен пределы полосы пропускания" +msgstr "Настройки ограничений скорости сохранены" #: ../java/src/net/i2p/router/web/ConfigNetHelper.java:39 #: ../java/src/net/i2p/router/web/ConfigNetHelper.java:47 #: ../java/src/net/i2p/router/web/ConfigNetHelper.java:50 #: ../java/src/net/i2p/router/web/ConfigNetHelper.java:57 #: ../java/src/net/i2p/router/web/ConfigNetHelper.java:60 -#, fuzzy msgid "unknown" -msgstr "неизвестный" +msgstr "неизвестен" -#: ../java/src/net/i2p/router/web/ConfigNetHelper.java:165 -#, fuzzy +#: ../java/src/net/i2p/router/web/ConfigNetHelper.java:169 msgid "bits per second" -msgstr "бит в секунду" +msgstr "бит/секунду" #: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:20 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:314 -#, fuzzy msgid "Ban peer until restart" -msgstr "Запрет пир пока маршрутизатора перезагружается" +msgstr "Забанить пира до перезагрузки маршрутизатора" #: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:23 -#, fuzzy, java-format +#, java-format msgid "Manually banned via {0}" -msgstr "Вручную запретили через {0}" +msgstr "Забанен вручную через {0}" #: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:24 #: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:33 @@ -1677,1813 +1422,1608 @@ msgstr "Вручную запретили через {0}" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:81 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:187 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:235 -#, fuzzy msgid "Peer" msgstr "Пир" #: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:24 -#, fuzzy msgid "banned until restart" -msgstr "Запрещена пока перезагрузка" +msgstr "забанен до перезагрузки" #: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:27 #: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:38 #: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:59 -#, fuzzy msgid "Invalid peer" -msgstr "Неверное сверстников" +msgstr "Некорректное описание пира" #: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:28 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:316 -#, fuzzy msgid "Unban peer" -msgstr "Отмена запрета пира" +msgstr "Разбанить пира" #: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:33 -#, fuzzy msgid "unbanned" -msgstr "запрет удален" +msgstr "разбанен" #: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:35 -#, fuzzy msgid "is not currently banned" -msgstr "в настоящее время не запрещена" +msgstr "на данный момент не забанен" #: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:39 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:322 -#, fuzzy msgid "Adjust Profile Bonuses" -msgstr "Настройка дополнительных потоков профиля" +msgstr "Настроить бонусы для этого пира" #: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:47 -#, fuzzy msgid "Bad speed value" -msgstr "Неправильное значение скорости" +msgstr "Некорректное значение скорости" #: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:52 -#, fuzzy msgid "Bad capacity value" -msgstr "Неправильное значение потенциала" +msgstr "Некорректное значение ёмкости" #: ../java/src/net/i2p/router/web/ConfigRestartBean.java:32 #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:57 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:292 -#, fuzzy msgid "Shutdown immediately" -msgstr "Выключить сразу" +msgstr "Выключить немедленно" #: ../java/src/net/i2p/router/web/ConfigRestartBean.java:36 -#, fuzzy msgid "Cancel shutdown" -msgstr "Отмена выключения" +msgstr "Отменить выключение" #: ../java/src/net/i2p/router/web/ConfigRestartBean.java:37 -#, fuzzy msgid "Cancel restart" -msgstr "Отмена перезагрузка" +msgstr "Отменить перезагрузку" #: ../java/src/net/i2p/router/web/ConfigRestartBean.java:39 -#, fuzzy msgid "Restart immediately" -msgstr "Перезагрузка сразу" +msgstr "Перезагрузить немедленно" #: ../java/src/net/i2p/router/web/ConfigRestartBean.java:43 -#, fuzzy msgid "Restart" -msgstr "Перезагрузка" +msgstr "Перезагрузить" #: ../java/src/net/i2p/router/web/ConfigRestartBean.java:46 -#, fuzzy msgid "Shutdown" -msgstr "Выключение" +msgstr "Выключить" #: ../java/src/net/i2p/router/web/ConfigRestartBean.java:59 -#, fuzzy msgid "Restart imminent" -msgstr "Перезагрузка сразу" +msgstr "Неотменяемая перезагрузка" #: ../java/src/net/i2p/router/web/ConfigRestartBean.java:61 -#, fuzzy msgid "Shutdown imminent" -msgstr "Выключения неминуемого" +msgstr "Неотменяемое выключение" #: ../java/src/net/i2p/router/web/ConfigRestartBean.java:65 -#, fuzzy, java-format +#, java-format msgid "Shutdown in {0}" msgstr "Выключение через {0}" #: ../java/src/net/i2p/router/web/ConfigRestartBean.java:70 -#, fuzzy, java-format +#, java-format msgid "Restart in {0}" msgstr "Перезагрузка через {0}" #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:53 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:290 -#, fuzzy msgid "Shutdown gracefully" -msgstr "Грациозно выключить" +msgstr "Выключить плавно" #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:56 -#, fuzzy msgid "Graceful shutdown initiated" -msgstr "Изящный выключение инициативе" +msgstr "Запущено плавное выключение" #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:60 -#, fuzzy msgid "Shutdown immediately! boom bye bye bad bwoy" -msgstr "выключения немедленно! бум пока пока плохой мальчик" +msgstr "Выключаем немедленно!" #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:61 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:294 -#, fuzzy msgid "Cancel graceful shutdown" -msgstr "Отмена изящные выключении" +msgstr "Отменить плавное выключение" #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:63 -#, fuzzy msgid "Graceful shutdown cancelled" -msgstr "Изящный выключения отменен" +msgstr "Плавное отключение отменено" #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:64 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:308 -#, fuzzy +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:306 msgid "Graceful restart" -msgstr "Мягкого перезапуска" +msgstr "Перезагрузить плавно" #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:67 -#, fuzzy msgid "Graceful restart requested" -msgstr "Мягкого перезапуска просил" +msgstr "Запущена плавная перезагрузка" #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:68 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:310 -#, fuzzy +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:308 msgid "Hard restart" -msgstr "Жесткая перезагрузка" +msgstr "Перезагрузить немедленно" #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:71 -#, fuzzy msgid "Hard restart requested" -msgstr "Жесткая перезагрузка просил" +msgstr "Запрошена быстрая перезагрузка" #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:72 -#, fuzzy msgid "Rekey and Restart" -msgstr "Восстановить Ключ и Перезагрузите" +msgstr "Сменить ключ и перезагрузить" #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:73 -#, fuzzy msgid "Rekeying after graceful restart" -msgstr "Повторный ввод после мягкого перезапуска" +msgstr "Смена ключа после плавной перезагрузки" #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:76 -#, fuzzy msgid "Rekey and Shutdown" -msgstr "Восстановить Ключ и Выключении" +msgstr "Сменить ключ и выключить" #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:77 -#, fuzzy msgid "Rekeying after graceful shutdown" -msgstr "Повторный ввод после выключения изящный" +msgstr "Смена ключа после плавного выключения" #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:80 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:338 -#, fuzzy +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:334 msgid "Run I2P on startup" -msgstr "Запуск I2P при запуске" +msgstr "Запускать I2P при старте" #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:82 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:340 -#, fuzzy +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:336 msgid "Don't run I2P on startup" -msgstr "Не запускать при запуске I2P" +msgstr "Не запускать I2P при старте" #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:84 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:356 -#, fuzzy +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:354 msgid "Dump threads" -msgstr "Сваливать Память" +msgstr "Вывести список тредов" #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:91 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:324 -#, fuzzy +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:322 msgid "Show systray icon" -msgstr "Показать системном трее значок" +msgstr "Показать значок статуса" #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:96 -#, fuzzy msgid "System tray icon enabled." -msgstr "Значок на панели задач включена." +msgstr "Включен значок-индикатор статуса в области уведомлений." #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:98 #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:110 -#, fuzzy msgid "System tray icon feature not supported on this platform. Sorry!" -msgstr "Значок на панели задач функция не поддерживается на этой платформе. Извините!" +msgstr "Вывод индикаторов в области уведомлений на этой платформе не поддерживается. Извините!" #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:101 #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:113 -#, fuzzy msgid "Warning: unable to contact the systray manager" -msgstr "Предупреждение: Не удается связаться с менеджером системный трей" +msgstr "Предупреждение: Не удалось соединиться с менеджером области уведомлений" #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:103 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:326 -#, fuzzy +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:324 msgid "Hide systray icon" -msgstr "Скрыть системном трее значок" +msgstr "Спрятать значок статуса" #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:108 -#, fuzzy msgid "System tray icon disabled." -msgstr "Значок на панели задач отключен." +msgstr "Выключен значок-индикатор статуса в области уведомлений." #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:115 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:364 -#, fuzzy +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:362 msgid "View console on startup" -msgstr "Открыть консоль при старте" +msgstr "Открывать веб-консоль при запуске I2P" #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:117 -#, fuzzy msgid "Console is to be shown on startup" -msgstr "Консоль будет показано при старте" +msgstr "Веб-консоль будет открываться при запуске I2P" #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:118 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:366 -#, fuzzy +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:364 msgid "Do not view console on startup" -msgstr "Не рассматривают консоль при старте" +msgstr "Не открывать веб-консоль при запуске I2P" #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:120 -#, fuzzy msgid "Console is not to be shown on startup" -msgstr "Консоли не будет показано при старте" +msgstr "Веб-консоль не будет открываться при запуске I2P" #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:129 -#, fuzzy msgid "Service installed" -msgstr "Установлена служба" +msgstr "Служба установлена" #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:131 -#, fuzzy msgid "Warning: unable to install the service" msgstr "Предупреждение: не удалось установить службу" #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:137 -#, fuzzy msgid "Service removed" msgstr "Служба удалена" #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:139 -#, fuzzy msgid "Warning: unable to remove the service" -msgstr "Предупреждение: Не удается удалить службу" +msgstr "Предупреждение: не удалось удалить службу" #: ../java/src/net/i2p/router/web/ConfigStatsHandler.java:118 -#, fuzzy msgid "Stat filter and location updated successfully to" -msgstr "Стат фильтра и расположения успешно обновлена до" +msgstr "Обновлены настройки файла и фильтра статистики. Новый фильтр" #: ../java/src/net/i2p/router/web/ConfigStatsHandler.java:120 -#, fuzzy msgid "Failed to update the stat filter and location" -msgstr "Не удалось обновить фильтра стат и местоположение" +msgstr "Не удалось обновить настройки файла и фильтра статистики." #: ../java/src/net/i2p/router/web/ConfigStatsHandler.java:121 -#, fuzzy msgid "Graph list updated, may take up to 60s to be reflected here and on the Graphs Page" -msgstr "Графика список обновляется, может занять до 60s должно быть отражено здесь и на графов странице " +msgstr "Список графиков обновлен, для обновления содержимого страницы графиков может потребоваться до 60 секунд." #: ../java/src/net/i2p/router/web/ConfigTunnelsHandler.java:137 -#, fuzzy msgid "Updated settings for all pools." -msgstr "Обновление настройки для всех бассейнов." +msgstr "Обновлены настройки для всех пулов." #: ../java/src/net/i2p/router/web/ConfigTunnelsHandler.java:142 -#, fuzzy msgid "Exploratory tunnel configuration saved successfully." -msgstr "Разведочный конфигурации туннеля успешно сохранены." +msgstr "Настройки зондирующих туннелей сохранены." #: ../java/src/net/i2p/router/web/ConfigTunnelsHandler.java:144 #: ../java/src/net/i2p/router/web/ConfigUIHandler.java:36 -#, fuzzy msgid "Error saving the configuration (applied but not saved) - please see the error logs." -msgstr "Ошибка при сохранении конфигурации (применяется, но не сохранили) - пожалуйста, смотрите логи ошибок." +msgstr "Не удалось сохранить настройки (применены, но не сохранены) — загляните в журнал ошибок" #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:11 -#, fuzzy msgid "hop" msgstr "хоп" #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:12 -#, fuzzy msgid "tunnel" msgstr "туннель" #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:14 -#, fuzzy msgid "hops" msgstr "хопа" #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:15 -#, fuzzy msgid "tunnels" -msgstr "туннели" +msgstr "туннелей" #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:26 -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:40 -#, fuzzy +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:41 msgid "Exploratory tunnels" -msgstr "Разведочные туннели" +msgstr "Зондирующие туннели" #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:46 -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:60 -#, fuzzy +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:61 msgid "Client tunnels for" -msgstr "Клиентские туннели для" +msgstr "Клиентские туннели для:" #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:69 -#, fuzzy msgid "ANONYMITY WARNING - Settings include 0-hop tunnels." -msgstr "АНОНИМНОСТЬ ПРЕДУПРЕЖДЕНИЕ - Настройки включают 0-хоп туннелей." +msgstr "ОПАСНО ДЛЯ АНОНИМНОСТИ — Настройки задают 0-хоповые туннели." #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:74 -#, fuzzy msgid "ANONYMITY WARNING - Settings include 1-hop tunnels." -msgstr "ANONYMITY WARNING - Settings include 1-hop tunnels." +msgstr "ОПАСНО ДЛЯ АНОНИМНОСТИ — Настройки задают 1-хоповые туннели." #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:77 -#, fuzzy msgid "PERFORMANCE WARNING - Settings include very long tunnels." -msgstr "ИСПОЛНЕНИИ ВНИМАНИЕ - настройки включают в себя очень длинные туннели." +msgstr "ОПАСНО ДЛЯ ПРОИЗВОДИТЕЛЬНОСТИ — Настройки задают слишком длинные туннели." #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:80 -#, fuzzy msgid "PERFORMANCE WARNING - Settings include high tunnel quantities." -msgstr "ИСПОЛНЕНИИ ВНИМАНИЕ - настройки включают в больших количествах туннель." +msgstr "ОПАСНО ДЛЯ ПРОИЗВОДИТЕЛЬНОСТИ — Настройки задают слишком большие количества туннелей." #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:82 -#, fuzzy msgid "Inbound" -msgstr "Входящий" +msgstr "Входящие" #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:82 -#, fuzzy msgid "Outbound" msgstr "Исходящие" #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:87 -#, fuzzy msgid "Length" -msgstr "Лесото" +msgstr "Длина" #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:104 -#, fuzzy msgid "Randomization" -msgstr "Рандомизации" +msgstr "Разброс" #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:128 -#, fuzzy msgid "Quantity" -msgstr "Колич." +msgstr "Количество" #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:145 -#, fuzzy msgid "Backup quantity" -msgstr "Резервное копирование количестве" +msgstr "Резервное количество" #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:167 -#, fuzzy msgid "Inbound options" -msgstr "Входящий конфигурации" +msgstr "Дополнительные параметры для входящих" #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:180 -#, fuzzy msgid "Outbound options" -msgstr "Исходящие конфигурации" +msgstr "Дополнительные параметры для исходящих" #: ../java/src/net/i2p/router/web/ConfigUIHandler.java:31 -#, fuzzy msgid "Theme change saved." -msgstr "Изменение сохраненной тема." +msgstr "Изменение темы оформления сохранено." #: ../java/src/net/i2p/router/web/ConfigUIHandler.java:33 -#, fuzzy msgid "Refresh the page to view." -msgstr "Обновите страницу, чтобы просмотреть." +msgstr "Обновите страницу для просмотра." #: ../java/src/net/i2p/router/web/ConfigUIHelper.java:41 -#, fuzzy msgid "English" -msgstr "Английский" +msgstr "English" #: ../java/src/net/i2p/router/web/ConfigUIHelper.java:41 -#, fuzzy msgid "French" -msgstr "Французский" +msgstr "Français" #: ../java/src/net/i2p/router/web/ConfigUIHelper.java:41 -#, fuzzy msgid "German" -msgstr "Немецкий" +msgstr "Deutsch" #: ../java/src/net/i2p/router/web/ConfigUIHelper.java:42 -#, fuzzy msgid "Chinese" -msgstr "Китайский" +msgstr "中文" #: ../java/src/net/i2p/router/web/ConfigUIHelper.java:42 -#, fuzzy msgid "Dutch" -msgstr "Голландский" +msgstr "Nederlands" #: ../java/src/net/i2p/router/web/ConfigUIHelper.java:42 -#, fuzzy msgid "Russian" msgstr "Русский" #: ../java/src/net/i2p/router/web/ConfigUIHelper.java:42 -#, fuzzy msgid "Swedish" -msgstr "Шведский" +msgstr "Svenska" #: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:56 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:310 -#, fuzzy msgid "Check for updates" -msgstr "Проверка обновлений" +msgstr "Проверить обновления" #: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:63 -#, fuzzy msgid "Update available, attempting to download now" -msgstr "Доступно обновление, пытаясь загрузить сейчас" +msgstr "Доступно обновление, пытаемся загрузить" #: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:65 -#, fuzzy msgid "Update available, click button on left to download" -msgstr "Доступные обновления, нажмите кнопку на левой скачать" +msgstr "Доступно обновление, нажмите кнопку слева для загрузки" #: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:67 -#, fuzzy msgid "No update available" msgstr "Нет доступных обновлений" #: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:75 -#, fuzzy msgid "Updating news URL to" -msgstr "Обновление новостей на URL" +msgstr "Новый URL новостей" #: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:83 -#, fuzzy msgid "Updating proxy host to" -msgstr "Обновление прокси-сервера для" +msgstr "Новый адрес I2P-прокси" #: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:91 -#, fuzzy msgid "Updating proxy port to" -msgstr "Обновление прокси порта" +msgstr "Новый порт I2P-прокси" #: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:104 -#, fuzzy msgid "Updating refresh frequency to" -msgstr "Обновление частоту обновления для" +msgstr "Новый интервал проверки обновлений" #: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:111 -#, fuzzy msgid "Updating update policy to" -msgstr "Updating update rules to" +msgstr "Новый режим обновлений" #: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:120 -#, fuzzy msgid "Updating update URLs." -msgstr "Обновляет обновления URL-адресов." +msgstr "Новые URL обновлений" #: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:128 -#, fuzzy msgid "Updating trusted keys." -msgstr "Обновление доверенных ключей." +msgstr "Обновление списка доверенных ключей." #: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:136 -#, fuzzy msgid "Updating unsigned update URL to" -msgstr "Обновление неподписанных URL обновления" +msgstr "Новый URL неподписанной тестовой сборки" #: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:75 -#: ../java/src/net/i2p/router/web/GraphHelper.java:115 -#, fuzzy +#: ../java/src/net/i2p/router/web/GraphHelper.java:133 msgid "Never" msgstr "Никогда" #: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:77 -#, fuzzy msgid "Every" -msgstr "Каждый" +msgstr "Каждые" #: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:90 #: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:92 -#, fuzzy msgid "Notify only" -msgstr "Сообщите только" +msgstr "Только уведомлять" #: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:95 #: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:97 -#, fuzzy msgid "Download and verify only" -msgstr "Скачать и проверить только" +msgstr "Только скачать и проверить целостность" #: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:101 #: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:103 -#, fuzzy msgid "Download, verify, and restart" -msgstr "Скачать, проверки и перезапуск" +msgstr "Скачать, проверить и обновить I2P" -#: ../java/src/net/i2p/router/web/GraphHelper.java:107 -#, fuzzy +#: ../java/src/net/i2p/router/web/GraphHelper.java:125 msgid "Configure Graph Display" -msgstr "Конфигурация Диаграмм Дисплея" +msgstr "Настройка показа графиков" -#: ../java/src/net/i2p/router/web/GraphHelper.java:107 -#, fuzzy +#: ../java/src/net/i2p/router/web/GraphHelper.java:125 msgid "Select Stats" -msgstr "Выберите статистику" +msgstr "Выбрать параметры" -#: ../java/src/net/i2p/router/web/GraphHelper.java:109 -#, fuzzy +#: ../java/src/net/i2p/router/web/GraphHelper.java:127 msgid "Periods" -msgstr "Периоды" +msgstr "Количество интервалов" -#: ../java/src/net/i2p/router/web/GraphHelper.java:110 -#, fuzzy +#: ../java/src/net/i2p/router/web/GraphHelper.java:128 msgid "Plot averages" -msgstr "Среднее значение диаграммы" +msgstr "Строить график средних значений" -#: ../java/src/net/i2p/router/web/GraphHelper.java:111 +#: ../java/src/net/i2p/router/web/GraphHelper.java:129 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:405 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:336 -#, fuzzy +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:332 msgid "or" msgstr "или" -#: ../java/src/net/i2p/router/web/GraphHelper.java:111 -#, fuzzy +#: ../java/src/net/i2p/router/web/GraphHelper.java:129 msgid "plot events" -msgstr "показания диаграммы" +msgstr "строить график количества событий" -#: ../java/src/net/i2p/router/web/GraphHelper.java:112 -#, fuzzy +#: ../java/src/net/i2p/router/web/GraphHelper.java:130 msgid "Image sizes" -msgstr "Размеры изображения" +msgstr "Размеры графиков" -#: ../java/src/net/i2p/router/web/GraphHelper.java:112 -#, fuzzy +#: ../java/src/net/i2p/router/web/GraphHelper.java:130 msgid "width" msgstr "ширина" -#: ../java/src/net/i2p/router/web/GraphHelper.java:113 -#, fuzzy +#: ../java/src/net/i2p/router/web/GraphHelper.java:131 msgid "height" msgstr "высота" -#: ../java/src/net/i2p/router/web/GraphHelper.java:113 -#: ../java/src/net/i2p/router/web/GraphHelper.java:114 -#, fuzzy +#: ../java/src/net/i2p/router/web/GraphHelper.java:131 +#: ../java/src/net/i2p/router/web/GraphHelper.java:132 msgid "pixels" -msgstr "пиксели" +msgstr "пикселей" -#: ../java/src/net/i2p/router/web/GraphHelper.java:115 -#, fuzzy +#: ../java/src/net/i2p/router/web/GraphHelper.java:133 msgid "Refresh delay" -msgstr "Задержка обновления" +msgstr "Интервал обновления" -#: ../java/src/net/i2p/router/web/GraphHelper.java:115 -#, fuzzy +#: ../java/src/net/i2p/router/web/GraphHelper.java:133 msgid "hour" msgstr "час" -#: ../java/src/net/i2p/router/web/GraphHelper.java:115 -#, fuzzy +#: ../java/src/net/i2p/router/web/GraphHelper.java:133 msgid "minute" msgstr "минута" -#: ../java/src/net/i2p/router/web/GraphHelper.java:115 -#, fuzzy +#: ../java/src/net/i2p/router/web/GraphHelper.java:133 msgid "minutes" -msgstr "минуты" +msgstr "минут(ы)" -#: ../java/src/net/i2p/router/web/GraphHelper.java:116 -#, fuzzy +#: ../java/src/net/i2p/router/web/GraphHelper.java:134 msgid "Redraw" msgstr "Перерисовать" -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:59 -#, fuzzy -msgid "Network Database RouterInfo Lookup" -msgstr "Поиск Информации о Маршрутизаторе Базы Данных Сети" +#: ../java/src/net/i2p/router/web/LogsHelper.java:13 +#: ../java/src/net/i2p/router/web/LogsHelper.java:37 +msgid "File location" +msgstr "Путь к файлу журнала" -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:74 -#, fuzzy +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:60 +msgid "Network Database RouterInfo Lookup" +msgstr "Просмотр RouterInfo" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:75 +#: ../java/strings/Strings.java:68 msgid "Router" msgstr "Маршрутизатор" -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:74 -#, fuzzy +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:75 msgid "not found in network database" -msgstr "не найдено в сети баз данных" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:82 -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:134 -#, fuzzy -msgid "Network Database Contents" -msgstr "База Данных Содержание" +msgstr "не найден в сетевой базе данных" #: ../java/src/net/i2p/router/web/NetDbRenderer.java:83 -#, fuzzy -msgid "View RouterInfo" -msgstr "Открыть Маршрутизатор Информация" +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:135 +msgid "Network Database Contents" +msgstr "Просмотр сетевой базы данных" #: ../java/src/net/i2p/router/web/NetDbRenderer.java:84 -#, fuzzy +msgid "View RouterInfo" +msgstr "Показать список RouterInfo" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:85 msgid "LeaseSets" -msgstr "АрендаНаборы" +msgstr "Список LeaseSet" -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:92 -#, fuzzy +# This term intentionally left in English +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:93 msgid "LeaseSet" -msgstr "АрендаНаборы" +msgstr "LeaseSet" -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:94 -#, fuzzy +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:95 msgid "Local" msgstr "Локальный" -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:96 -#, fuzzy -msgid "Unpublished" -msgstr "Неопубликованные" - #: ../java/src/net/i2p/router/web/NetDbRenderer.java:97 -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:104 -#, fuzzy +msgid "Unpublished" +msgstr "Неопубликованный" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:98 +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:105 msgid "Destination" -msgstr "Направление" +msgstr "Адрес назначения" -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:114 -#, fuzzy, java-format +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:115 +#, java-format msgid "Expires in {0}" -msgstr "Срок истекает в {0}" +msgstr "Истекает через {0}" -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:116 -#, fuzzy, java-format +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:117 +#, java-format msgid "Expired {0} ago" msgstr "Истек {0} назад" -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:118 +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:119 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:156 -#, fuzzy msgid "Gateway" msgstr "Шлюз" -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:118 -#, fuzzy +# This term intentionally left in English +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:119 msgid "Lease" -msgstr "Аренда" +msgstr "Lease" -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:120 -#, fuzzy +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:121 msgid "Tunnel" msgstr "Туннель" -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:134 -#, fuzzy +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:135 msgid "View LeaseSets" -msgstr "Смотреть на Аренду-Наборы" +msgstr "Показать список LeaseSet" -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:136 -#, fuzzy +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:137 msgid "Not initialized" -msgstr "Не инициализируется" +msgstr "База не инициализирована" -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:145 -#, fuzzy +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:146 msgid "Routers" msgstr "Маршрутизаторы" -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:147 -#, fuzzy +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:148 msgid "Show all routers" -msgstr "Показать все маршрутизаторы" +msgstr "Показать полный список" -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:149 -#, fuzzy +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:150 msgid "Show all routers with full stats" -msgstr "Показать все маршрутизаторы с полной статистики" +msgstr "Показать полный список с полной статистикой" -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:184 -#, fuzzy +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:185 msgid "Network Database Router Statistics" -msgstr "Сетевая База Данных Статистики Маршрутизатора" +msgstr "Статистика маршрутизаторов" -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:190 -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:204 -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:222 -#, fuzzy +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:191 +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:205 +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:223 msgid "Count" msgstr "Количество" -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:190 -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:154 -#, fuzzy +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:191 +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:161 msgid "Version" msgstr "Версия" -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:204 -#, fuzzy +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:205 msgid "Transports" -msgstr "Транспортные" +msgstr "Транспортный протокол" -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:222 -#, fuzzy +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:223 msgid "Country" msgstr "Страна" -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:254 -#, fuzzy +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:255 msgid "Our info" -msgstr "Наша информация" +msgstr "Информация о нас" -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:256 -#, fuzzy +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:257 msgid "Peer info for" msgstr "Информация о пире" -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:260 -#, fuzzy +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:261 msgid "Full entry" -msgstr "Полная запись" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:266 -#: ../java/src/net/i2p/router/web/SummaryHelper.java:96 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:581 -#, fuzzy -msgid "Hidden" -msgstr "Скрыто" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:266 -#, fuzzy -msgid "Updated" -msgstr "Обновлено" +msgstr "Показать полную запись" #: ../java/src/net/i2p/router/web/NetDbRenderer.java:267 -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:270 -#, fuzzy, java-format +#: ../java/src/net/i2p/router/web/SummaryHelper.java:105 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:589 +msgid "Hidden" +msgstr "Скрытый" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:267 +msgid "Updated" +msgstr "Обновленный" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:268 +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:271 +#, java-format msgid "{0} ago" msgstr "{0} назад" -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:269 -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:273 -#, fuzzy +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:270 +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:274 msgid "Published" -msgstr "Опубликован" +msgstr "Опубликовано" -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:275 -#, fuzzy +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:276 msgid "Address(es)" -msgstr "Адреса" +msgstr "Адрес(а)" -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:308 -#, fuzzy +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:309 msgid "Hidden or starting up" -msgstr "Скрытая или запуском" +msgstr "В скрытом режиме или недавно запущен" -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:308 -#, fuzzy +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:309 msgid "SSU" msgstr "SSU" -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:308 -#, fuzzy -msgid "SSU with introducers" -msgstr "SSU с поручителями" - #: ../java/src/net/i2p/router/web/NetDbRenderer.java:309 -#, fuzzy +msgid "SSU with introducers" +msgstr "SSU через посредников" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:310 msgid "NTCP" msgstr "NTCP" -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:309 -#, fuzzy +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:310 msgid "NTCP and SSU" msgstr "NTCP и SSU" -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:309 -#, fuzzy +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:310 msgid "NTCP and SSU with introducers" -msgstr "NTCP и SSU с поручителями" +msgstr "NTCP и SSU через посредников" #: ../java/src/net/i2p/router/web/NewsFetcher.java:80 -#, fuzzy, java-format +#, java-format msgid "News last updated {0} ago." -msgstr "Новости Последнее обновление {0} назад." +msgstr "Новости последний раз обновлялись {0} назад." #: ../java/src/net/i2p/router/web/NewsFetcher.java:86 -#, fuzzy, java-format +#, java-format msgid "News last checked {0} ago." -msgstr "Новости Последняя проверка: {0} назад." +msgstr "Новости последний раз проверялись {0} назад." #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:72 -#, fuzzy msgid "Peer Profiles" -msgstr "Профили Пиров" +msgstr "Профили пиров" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:73 -#, fuzzy, java-format +#, java-format msgid "Showing {0} recent profiles." -msgstr "Показаны {0} последних профилей." +msgstr "Показано {0} недавно обновленных профилей" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:75 -#, fuzzy, java-format +#, java-format msgid "Hiding {0} older profiles." -msgstr "Сокрытие {0} взрослыми профилей." +msgstr "Скрыто {0} устаревших профилей." #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:77 -#, fuzzy, java-format +#, java-format msgid "Hiding {0} standard profiles." -msgstr "Сокрытие {0} стандартных профилей." +msgstr "Также скрыто {0} стандартных профилей (кликните для показа)." #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:82 -#, fuzzy msgid "Groups (Caps)" -msgstr "Группы (Способности)" +msgstr "Входит в группы (Caps)" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:83 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:251 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:334 -#, fuzzy msgid "Speed" msgstr "Скорость" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:84 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:253 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:338 -#, fuzzy msgid "Capacity" -msgstr "Способность" +msgstr "Ёмкость" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:85 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:255 -#, fuzzy msgid "Integration" msgstr "Интеграция" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:86 -#, fuzzy msgid "Status" msgstr "Статус" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:126 -#, fuzzy msgid "Fast, High Capacity" -msgstr "Быстрый, Высокая Производительная Мощность" +msgstr "Быстрые, Высокоёмкие" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:127 -#, fuzzy msgid "High Capacity" -msgstr "Высокая производительная мощность" +msgstr "Высокоёмкие" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:128 -#, fuzzy msgid "Standard" -msgstr "Стандартный" +msgstr "Стандартные" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:129 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:163 -#, fuzzy msgid "Failing" -msgstr "В противном случае" +msgstr "Сбоит" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:131 -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:253 -#, fuzzy +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:260 msgid "Integrated" msgstr "Интегрированные" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:162 -#, fuzzy msgid "Banned" -msgstr "Запрещена" +msgstr "Забанен" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:164 -#, fuzzy msgid "Unreachable" -msgstr "Недоступные" +msgstr "Недоступен" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:171 -#, fuzzy msgid "Test Fails" -msgstr "Испытание Неудачи" +msgstr "Неудачных тестов" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:175 -#, fuzzy msgid "profile" msgstr "профиль" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:184 -#, fuzzy msgid "Floodfill and Integrated Peers" -msgstr "Floodfill и Интегрированные Пиры" +msgstr "Floodfill и хорошо интегрированные пиры" +# This term intentionally left in English #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:188 -#, fuzzy msgid "Caps" -msgstr "Предельные" +msgstr "Caps" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:189 -#, fuzzy msgid "Integ. Value" -msgstr "Интегрированное значение" +msgstr "Интег. Значение" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:190 -#, fuzzy msgid "Last Heard About" -msgstr "Последний Слышали О" +msgstr "Последний раз слышали о" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:191 -#, fuzzy msgid "Last Heard From" -msgstr "Последний Раз Слышали От" +msgstr "Последний приём" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:192 -#, fuzzy msgid "Last Good Send" -msgstr "Последний Хорошо Отправить" +msgstr "Последняя удачная передача" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:193 -#, fuzzy msgid "Last Bad Send" -msgstr "Последний Плохо Отправить" +msgstr "Последняя неудачная передача" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:194 -#, fuzzy msgid "10m Resp. Time" -msgstr "10 мин. Время отклика" +msgstr "Время отклика (последние 10 мин)" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:195 -#, fuzzy msgid "1h Resp. Time" -msgstr "1 час Время отклика" +msgstr "Время отклика (последний 1 час)" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:196 -#, fuzzy msgid "1d Resp. Time" -msgstr "1 день Время отклика" +msgstr "Время отклика (последний 1 день)" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:197 -#, fuzzy msgid "Last Good Lookup" -msgstr "Последний Хороший Поиск" +msgstr "Последний удачный поиск" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:198 -#, fuzzy msgid "Last Bad Lookup" -msgstr "Последний Плохо Поиска" +msgstr "Последний неудачный поиск" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:199 -#, fuzzy msgid "Last Good Store" -msgstr "Последний Хорошо Хранения" +msgstr "Последнее удачное размещение" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:200 -#, fuzzy msgid "Last Bad Store" -msgstr "Последний Плохо Хранения" +msgstr "Последнее неудачное размещение" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:201 -#, fuzzy msgid "1h Fail Rate" -msgstr "1ч Интенсивность Отказов" +msgstr "Уровень отказов за 1 час" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:202 -#, fuzzy msgid "1d Fail Rate" -msgstr "1д Интенсивность Отказов" +msgstr "Уровень отказов за 1 день" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:250 -#, fuzzy msgid "Thresholds" -msgstr "Порог" +msgstr "Пороговые значения" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:252 -#, fuzzy msgid "fast peers" msgstr "быстрые пиры" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:254 -#, fuzzy msgid "high capacity peers" -msgstr "пиры у которых высокая производительная мощность" +msgstr "высокоёмкие пиры" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:256 -#, fuzzy msgid " well integrated peers" msgstr "хорошо интегрированные пиры" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:257 -#, fuzzy msgid "Definitions" -msgstr "Определение" +msgstr "Определения" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:258 -#, fuzzy msgid "as determined by the profile organizer" -msgstr "как определяется профилем организатор" +msgstr "определяется автоматически модулем ProfileOrganizer на основании собранной информации о производительности пира" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:258 -#, fuzzy msgid "groups" msgstr "группы" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:259 -#, fuzzy msgid "capabilities in the netDb, not used to determine profiles" -msgstr "возможности в сетьБД, не используются для определения профилей" +msgstr "информация о пире, предоставленная сетевой базой данных; для профилирования не используется" +# This term intentionally left in English #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:259 -#, fuzzy msgid "caps" -msgstr "пределы" +msgstr "caps" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:260 -#, fuzzy msgid "peak throughput (bytes per second) over a 1 minute period that the peer has sustained in a single tunnel" -msgstr "Пик производительности (байт в секунду) в течение 1 минуты периода, что партнер имеет выдержанный в одном туннеле" +msgstr "пиковая скорость (байты/секунду) выданная пиром на одном туннеле за 1-минутый период" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:260 -#, fuzzy msgid "speed" msgstr "скорость" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:261 -#, fuzzy msgid "capacity" -msgstr "потенциала" +msgstr "ёмкость" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:261 -#, fuzzy msgid "how many tunnels can we ask them to join in an hour?" -msgstr "cколько туннелей мы можем попросить их присоединиться к часу?" +msgstr "к скольким туннелям мы можем попросить этого пира подсоединиться за час?" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:262 -#, fuzzy msgid "how many new peers have they told us about lately?" -msgstr "сколько новых узлов не нам сказали последнее время?" +msgstr "о скольких новых пирах этот пир нам сообщил в последнее время?" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:262 -#, fuzzy msgid "integration" msgstr "интеграция" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:263 -#, fuzzy msgid "is the peer banned, or unreachable, or failing tunnel tests?" -msgstr "это совокупность запрещены или недоступны, или не туннель тесты?" +msgstr "забанен ли этот пир, недоступен, дает ошибки на тестах?" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:263 -#, fuzzy msgid "status" msgstr "статус" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:321 -#, fuzzy msgid "n/a" -msgstr "не доступно" +msgstr "нет данных" #: ../java/src/net/i2p/router/web/ShitlistRenderer.java:57 -#, fuzzy, java-format +#, java-format msgid "Temporary ban expiring in {0}" -msgstr "Временного запрета истекает в {0}" +msgstr "Временный бан истекает через {0}" #: ../java/src/net/i2p/router/web/ShitlistRenderer.java:59 -#, fuzzy, java-format +#, java-format msgid "Banned until restart or in {0}" -msgstr "Запрещены до перезагрузку через {0}" +msgstr "Забанен до перезагрузки или истечения {0}" #: ../java/src/net/i2p/router/web/ShitlistRenderer.java:71 -#, fuzzy msgid "unban now" -msgstr "удалить запрета сейчас" +msgstr "разбанить" + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:55 +msgid "GO" +msgstr "Перейти" #: ../java/src/net/i2p/router/web/StatsGenerator.java:58 -#, fuzzy msgid "Statistics gathered during this router's uptime" -msgstr "Статистические данные, полученные во время проведенное на сайте этого маршрутизатора" +msgstr "Статистика собрана за время с последнего запуска маршрутизатора" #: ../java/src/net/i2p/router/web/StatsGenerator.java:61 -#, fuzzy msgid "The data gathered is quantized over a 1 minute period, so should just be used as an estimate." -msgstr "Данные собраны квантуется более 1 минуты периода, поэтому следует использовать в качестве оценки." +msgstr "Собираемые данные округляются за 1-минутные промежутки, поэтому используйте эту информацию только для приблизительной оценки." + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:107 +msgid "frequency" +msgstr "частота" + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:141 +msgid "No lifetime events" +msgstr "Счетчик lifetime событий пуст" + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:153 +msgid "rate" +msgstr "интервал" + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:155 +msgid "avg value" +msgstr "среднее значение" + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:184 +msgid "events" +msgstr "событий" + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:190 +msgid "No events" +msgstr "Нет событий" + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:196 +msgid "lifetime average" +msgstr "среднее за время работы" + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:198 +msgid "peak average" +msgstr "пиковое среднее" + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:216 +msgid "lifetime average value" +msgstr "среднее значение за время работы" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:44 -#, fuzzy msgid "Configure startup of clients and webapps (services); manually start dormant services" -msgstr "Настройка запуска клиентов и Webapps (услуг); вручную запустить покоя услуги" +msgstr "Настройка автозапуска клиентов и веб-апплетов, ручной запуск неактивных приложений" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:46 -#, fuzzy msgid "I2P Services" -msgstr "Сервисы I2P" +msgstr "I2P сервисы" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:52 -#, fuzzy msgid "Manage your I2P hosts file here (I2P domain name resolution)" -msgstr "Управляйте своими I2P хостов файла здесь (I2P доменных имен)" +msgstr "Здесь можно управлять hosts-файлами (единственный механизм, используемый I2P для отображения доменных имен)" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:54 -#, fuzzy msgid "Addressbook" -msgstr "Адресная Книжка" +msgstr "Адресная Книга" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:58 -#, fuzzy msgid "Built-in anonymous BitTorrent Client" -msgstr "Встроенные в анонимной загрузки клиента" +msgstr "Встроенный анонимный Bittorrent-клиент" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:60 -#, fuzzy msgid "Torrents" msgstr "Торренты" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:64 -#, fuzzy msgid "Anonymous webmail client" -msgstr "Аноним электронной почтовый веб-клиент" +msgstr "Анонимный почтовый клиент с веб-интерфейсом" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:66 -#, fuzzy msgid "Webmail" -msgstr "Веб-Почта" +msgstr "Веб-почта" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:70 -#, fuzzy msgid "Anonymous resident webserver" -msgstr "Аноним сервер резидента" +msgstr "Встроенный анонимный веб-сервер" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:72 -#, fuzzy msgid "Webserver" -msgstr "Веб-Сервер" +msgstr "Веб-сервер" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:76 -#, fuzzy msgid "Configure I2P Router" msgstr "Настройка Маршрутизатора I2P" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:78 -#, fuzzy msgid "I2P Internals" -msgstr "Внутренняя Организация I2P" +msgstr "I2P свойства" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:84 -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:348 -#, fuzzy +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:355 msgid "View existing tunnels and tunnel build status" -msgstr "Просмотр существующих туннелей и туннелей построить статус" +msgstr "Обзор списка существующих туннелей и статуса строящихся" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:90 -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:225 -#, fuzzy +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:232 msgid "Show all current peer connections" -msgstr "Показать все текущие подключения сверстников" +msgstr "Просмотр списка текущих соединения с пирами" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:96 -#, fuzzy msgid "Show recent peer performance profiles" -msgstr "Показать последних профили производительности сверстников" +msgstr "Просмотр профилей пиров" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:98 -#, fuzzy msgid "Profiles" msgstr "Профили" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:102 -#, fuzzy msgid "Show list of all known I2P routers" -msgstr "Показать список всех известных I2P маршрутизаторы" +msgstr "Показать список всех известных I2P маршрутизаторов" +# This term intentionally left in English #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:104 -#, fuzzy msgid "NetDB" -msgstr "СетьДБ" +msgstr "NetDB" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:108 -#, fuzzy msgid "Health Report" -msgstr "Доклад о Состоянии Здравоохранения" +msgstr "Журналы сообщений маршрутизатора" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:110 -#, fuzzy msgid "Logs" -msgstr "Логи" +msgstr "Журналы" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:114 -#, fuzzy msgid "Show the router's workload, and how it's performing" -msgstr "Показать нагрузку на маршрутизатор, и как это исполняющей" +msgstr "Просмотр загрузки маршрутизатора и эффективности его работы" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:116 -#, fuzzy msgid "Jobs" msgstr "Задачи" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:120 -#, fuzzy msgid "Graph router performance" msgstr "График производительности маршрутизатора" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:122 -#, fuzzy msgid "Graphs" -msgstr "Диаграммы" +msgstr "Графики" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:126 -#, fuzzy msgid "Textual router performance statistics" -msgstr "Текстовое маршрутизатора статистики по эффективности" +msgstr "Статистика производительности маршрутизатора в текстовом виде" -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:138 -#, fuzzy +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:132 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:370 +msgid "Local Destinations" +msgstr "Локальные туннели" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:134 +#: ../java/strings/Strings.java:62 +msgid "I2PTunnel" +msgstr "Менеджер Туннелей" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:145 msgid "I2P Router Help" -msgstr "I2P Помощь Маршрутизатор" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:140 -#, fuzzy -msgid "General" -msgstr "Общий" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:143 -#, fuzzy -msgid "Your unique I2P router identity is" -msgstr "Ваш уникальный I2P маршрутизатора идентичность" +msgstr "Справка Маршрутизатора I2P" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:147 -#, fuzzy +msgid "General" +msgstr "Общая информация" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:150 +msgid "Your unique I2P router identity is" +msgstr "Уникальный идентификатор Вашего I2P маршрутизатора:" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:154 msgid "never reveal it to anyone" -msgstr "никогда не показывайте его никому" +msgstr "никому его не показывайте." -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:149 -#, fuzzy +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:156 msgid "Local Identity" -msgstr "Локальный Адрес" +msgstr "Локальный идентификатор" -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:161 -#, fuzzy +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:168 msgid "How long we've been running for this session" -msgstr "Как долго мы уже в течение этой сессии" +msgstr "Время работы маршрутизатора с последнего запуска" -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:164 -#, fuzzy +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:171 msgid "Uptime" msgstr "Аптайм" -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:171 -#, fuzzy +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:178 msgid "Help with configuring your firewall and router for optimal I2P performance" msgstr "Помощь в настройке брандмауэра и маршрутизатора для обеспечения оптимальной производительности I2P" -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:198 -#, fuzzy +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:205 msgid "Download" -msgstr "Загрузка" +msgstr "Скачать" -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:207 -#, fuzzy +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:214 msgid "Download Unsigned" -msgstr "Загрузка Неподписанных" +msgstr "Скачать неподписанное" -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:233 -#, fuzzy +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:240 msgid "Active" msgstr "Активные" -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:241 -#, fuzzy +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:248 msgid "Fast" msgstr "Быстрые" -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:247 -#, fuzzy +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:254 msgid "High capacity" -msgstr "Высокая производительная мощность" +msgstr "Высокоёмкие" -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:259 -#, fuzzy +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:266 msgid "Known" -msgstr "Общепризнанные" +msgstr "Известные" -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:274 -#, fuzzy +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:281 msgid "Help with firewall configuration" msgstr "Помощь в настройке брандмауэра" -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:276 -#, fuzzy +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:283 msgid "Check NAT/firewall" -msgstr "Проверка NAT/брандмауэры" +msgstr "Проверьте настройки NAT/брандмауэров." -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:296 -#, fuzzy +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:303 msgid "Reseed" -msgstr "Повтор Первой Сети Связи" +msgstr "Повторить начальную загрузку" -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:313 -#, fuzzy +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:320 msgid "Configure router bandwidth allocation" -msgstr "Настройка маршрутизатора распределения пропускной способностью" +msgstr "Настройка ограничений скорости" -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:315 -#, fuzzy +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:322 msgid "Bandwidth in/out" -msgstr "Пропускная способность входящего / выходящего" +msgstr "Трафик (вх./исх.)" -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:332 -#, fuzzy +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:339 msgid "Total" msgstr "Всего" -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:340 -#, fuzzy +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:347 msgid "Used" -msgstr "Колич." +msgstr "Объем" -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:350 -#, fuzzy +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:357 msgid "Tunnels in/out" -msgstr "Туннели входящие / выходящие " +msgstr "Туннели (вх./исх.)" -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:355 -#, fuzzy +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:362 msgid "Exploratory" -msgstr "Разведочные" +msgstr "Зондирующие" -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:371 -#, fuzzy +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:378 msgid "Participating" -msgstr "Участвующие" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:377 -#, fuzzy -msgid "What's in the router's job queue?" -msgstr "Что в очереди заданий маршрутизатор?" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:379 -#, fuzzy -msgid "Congestion" -msgstr "Перегрузка" +msgstr "Транзитные" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:384 -#, fuzzy -msgid "Job lag" -msgstr "Задержка задачи" +msgid "Share ratio" +msgstr "Доля транзита" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:390 -#, fuzzy +msgid "What's in the router's job queue?" +msgstr "Просмотр очереди заданий маршрутизатора." + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:392 +msgid "Congestion" +msgstr "Занятость" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:397 +msgid "Job lag" +msgstr "Задержка задач" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:403 msgid "Message delay" -msgstr "Задержка доставки сообщения" +msgstr "Задежка сообщений" -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:396 -#, fuzzy +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:409 msgid "Tunnel lag" -msgstr "Задержка туннеля" +msgstr "Задержка туннелей" -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:402 -#, fuzzy +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:415 msgid "Backlog" msgstr "Очередь" -#: ../java/src/net/i2p/router/web/SummaryHelper.java:73 -#, fuzzy -msgid "skew" -msgstr "отклонение" - -#: ../java/src/net/i2p/router/web/SummaryHelper.java:92 -#, fuzzy +#: ../java/src/net/i2p/router/web/SummaryHelper.java:96 msgid "ERR-Client Manager I2CP Error - check logs" -msgstr "ОШИБКА-менеджер клиентов I2CP ошибка - проверьте журналы" - -#: ../java/src/net/i2p/router/web/SummaryHelper.java:94 -#, fuzzy -msgid "ERR-ClockSkew" -msgstr "ОШИБКА-ЧасиОтклонение" +msgstr "ОШИБКА - ошибка менеджера I2CP - загляните в журнал ошибок" #: ../java/src/net/i2p/router/web/SummaryHelper.java:103 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:557 -#, fuzzy +#, java-format +msgid "ERR-Clock Skew of {0}" +msgstr "ОШИБКА - Часы сбиты (расхождение {0})" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:112 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:565 msgid "OK" -msgstr "ОК" - -#: ../java/src/net/i2p/router/web/SummaryHelper.java:104 -#, fuzzy -msgid "ERR-Private TCP Address" -msgstr "ОШИБКА Частные TCP-адрес" - -#: ../java/src/net/i2p/router/web/SummaryHelper.java:106 -#, fuzzy -msgid "ERR-SymmetricNAT" -msgstr "ОШИБКА - Симметричный-NAT" - -#: ../java/src/net/i2p/router/web/SummaryHelper.java:109 -#, fuzzy -msgid "WARN-Firewalled with Inbound TCP Enabled" -msgstr "ПРЕДУПРЕЖДЕНИЕ-файрвол с Входящий TCP Включено" - -#: ../java/src/net/i2p/router/web/SummaryHelper.java:111 -#, fuzzy -msgid "WARN-Firewalled and Floodfill" -msgstr "ПРЕДУПРЕЖДЕНИЕ-файрволл и Floodfill" +msgstr "OK" #: ../java/src/net/i2p/router/web/SummaryHelper.java:113 -#, fuzzy +msgid "ERR-Private TCP Address" +msgstr "ОШИБКА - Частный TCP Адрес" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:115 +msgid "ERR-SymmetricNAT" +msgstr "ОШИБКА - Симмметричный NAT" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:118 +msgid "WARN-Firewalled with Inbound TCP Enabled" +msgstr "ПРЕДУПРЕЖДЕНИЕ - Заблокирован извне при включенном на вход TCP" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:120 +msgid "WARN-Firewalled and Floodfill" +msgstr "ПРЕДУПРЕЖДЕНИЕ - Заблокирован извне и Floodfill" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:122 msgid "WARN-Firewalled and Fast" -msgstr "ПРЕДУПРЕЖДЕНИЕ-файрволл и быстро" - -#: ../java/src/net/i2p/router/web/SummaryHelper.java:114 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:561 -#, fuzzy -msgid "Firewalled" -msgstr "За Брандмауэром" - -#: ../java/src/net/i2p/router/web/SummaryHelper.java:116 -#, fuzzy -msgid "ERR-UDP Port In Use - Set i2np.udp.internalPort=xxxx in advanced config and restart" -msgstr "ОШИБКА UDP-порта в использовании - Задать i2np.udp.internalPort=xxxx Расширенный конфигурации и перезапустить" +msgstr "ПРЕДУПРЕЖДЕНИЕ - Заблокирован извне и Быстрый" #: ../java/src/net/i2p/router/web/SummaryHelper.java:123 -#, fuzzy -msgid "ERR-UDP Disabled and Inbound TCP host/port not set" -msgstr "ERROR-UDP Disabled and Inbound TCP host/port not set" +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:569 +msgid "Firewalled" +msgstr "Заблокирован извне" #: ../java/src/net/i2p/router/web/SummaryHelper.java:125 -#, fuzzy -msgid "WARN-Firewalled with UDP Disabled" -msgstr "ПРЕДУПРЕЖДЕНИЕ-файрвол с UDP отключено" +msgid "ERR-UDP Port In Use - Set i2np.udp.internalPort=xxxx in advanced config and restart" +msgstr "ОШИБКА - UDP-порт уже занят - перенастройте i2np.udp.internalPort=xxxx в дополнительных настройках и перезапустите маршрутизатор" -#: ../java/src/net/i2p/router/web/SummaryHelper.java:127 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:577 -#, fuzzy +#: ../java/src/net/i2p/router/web/SummaryHelper.java:131 +msgid "ERR-No Active Peers, Check Network Connection and Firewall" +msgstr "ОШИБКА - Нет активных пиров, проверьте подключение к сети и брандмауэр" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:134 +msgid "ERR-UDP Disabled and Inbound TCP host/port not set" +msgstr "ОШИБКА - UDP отключено и не заданы адрес/порт для входящих TCP-соединений" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:136 +msgid "WARN-Firewalled with UDP Disabled" +msgstr "ПРЕДУПРЕЖДЕНИЕ - Заблокирован извне при отключенном UDP" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:138 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:585 msgid "Testing" msgstr "Проверка" -#: ../java/src/net/i2p/router/web/SummaryHelper.java:360 -#, fuzzy +#: ../java/src/net/i2p/router/web/SummaryHelper.java:370 msgid "Add/remove/edit & control your client and server tunnels" -msgstr "Добавлять / удалять / редактировать и управлять вашим клиентом и сервером туннелей" +msgstr "Управление клиентскими и серверными туннелями" -#: ../java/src/net/i2p/router/web/SummaryHelper.java:360 -#, fuzzy -msgid "Local Destinations" -msgstr "Локальные Пункты Назначения" - -#: ../java/src/net/i2p/router/web/SummaryHelper.java:369 -#, fuzzy +#: ../java/src/net/i2p/router/web/SummaryHelper.java:382 msgid "Server" msgstr "Сервер" -#: ../java/src/net/i2p/router/web/SummaryHelper.java:373 -#, fuzzy +#: ../java/src/net/i2p/router/web/SummaryHelper.java:386 msgid "Show tunnels" -msgstr "Показать туннелей" +msgstr "Перейти к списку туннелей" -#: ../java/src/net/i2p/router/web/SummaryHelper.java:384 -#, fuzzy +#: ../java/src/net/i2p/router/web/SummaryHelper.java:397 msgid "Leases expired" -msgstr "Срока аренды" +msgstr "Срок аренды истек" -#: ../java/src/net/i2p/router/web/SummaryHelper.java:384 -#: ../java/src/net/i2p/router/web/SummaryHelper.java:385 -#, fuzzy +#: ../java/src/net/i2p/router/web/SummaryHelper.java:397 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:398 msgid "Rebuilding" -msgstr "Восстановление" +msgstr "Построение заново" -#: ../java/src/net/i2p/router/web/SummaryHelper.java:385 -#, fuzzy +#: ../java/src/net/i2p/router/web/SummaryHelper.java:398 msgid "ago" msgstr "назад" -#: ../java/src/net/i2p/router/web/SummaryHelper.java:388 -#, fuzzy +#: ../java/src/net/i2p/router/web/SummaryHelper.java:401 msgid "Ready" -msgstr "Готовый" +msgstr "Готов к работе" -#: ../java/src/net/i2p/router/web/SummaryHelper.java:392 -#, fuzzy +#: ../java/src/net/i2p/router/web/SummaryHelper.java:405 msgid "Building" -msgstr "Строительство" +msgstr "Построение" -#: ../java/src/net/i2p/router/web/SummaryHelper.java:392 -#, fuzzy +#: ../java/src/net/i2p/router/web/SummaryHelper.java:405 msgid "Building tunnels" -msgstr "Строительство туннелей" +msgstr "Построение туннелей" -#: ../java/src/net/i2p/router/web/SummaryHelper.java:404 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:410 +msgid "none" +msgstr "нет" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:421 #: ../java/strings/Strings.java:36 -#, fuzzy msgid "shared clients" -msgstr "общие клиенты" +msgstr "коллективные клиенты" -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:40 -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:62 -#, fuzzy +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:41 +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:63 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:273 msgid "configure" -msgstr "конфигурировать" +msgstr "настроить" -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:64 -#, fuzzy +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:65 msgid "dead" -msgstr "мертвый" +msgstr "мертв" -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:70 -#, fuzzy +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:71 msgid "Participating tunnels" -msgstr "Участвующие туннели" +msgstr "Транзитные туннели" -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:71 -#, fuzzy +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:72 msgid "From" -msgstr "От" +msgstr "От кого" -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:71 -#, fuzzy +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:72 msgid "Receive on" -msgstr "Получить на" +msgstr "ID принимающего туннеля" -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:72 -#, fuzzy +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:73 msgid "Expiration" -msgstr "Истечение срока" +msgstr "Истечение срока работы" -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:72 -#, fuzzy +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:73 msgid "Send on" -msgstr "Отправить по" +msgstr "ID передающего туннеля" -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:72 -#, fuzzy +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:73 msgid "To" -msgstr "К" +msgstr "Кому" -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:73 -#, fuzzy +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:74 msgid "Rate" -msgstr "Ставка" +msgstr "Скорость" -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:73 -#, fuzzy +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:74 msgid "Role" msgstr "Роль" -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:73 +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:74 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:156 -#, fuzzy msgid "Usage" -msgstr "Использование" +msgstr "Трафик" #: ../java/src/net/i2p/router/web/TunnelRenderer.java:107 -#, fuzzy msgid "grace period" -msgstr "льготный период" +msgstr "резервный период" #: ../java/src/net/i2p/router/web/TunnelRenderer.java:117 -#, fuzzy msgid "Outbound Endpoint" -msgstr "Исходящие Конечная точка" +msgstr "Выходная конечная точка" #: ../java/src/net/i2p/router/web/TunnelRenderer.java:119 -#, fuzzy msgid "Inbound Gateway" -msgstr "Входящий Сетевой Шлюз" +msgstr "Входной шлюз" #: ../java/src/net/i2p/router/web/TunnelRenderer.java:121 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:162 -#, fuzzy msgid "Participant" msgstr "Участник" #: ../java/src/net/i2p/router/web/TunnelRenderer.java:126 -#, fuzzy msgid "Inactive participating tunnels" -msgstr "Неактивные участвующие туннелей" +msgstr "Неактивных транзитных туннелей" #: ../java/src/net/i2p/router/web/TunnelRenderer.java:127 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:216 -#, fuzzy msgid "Lifetime bandwidth usage" -msgstr "Использование долговечной пропускной способности входящего канала" +msgstr "Трафик за время существования" #: ../java/src/net/i2p/router/web/TunnelRenderer.java:156 -#, fuzzy msgid "Expiry" -msgstr "Истечение Срока" +msgstr "Истечение срока работы" #: ../java/src/net/i2p/router/web/TunnelRenderer.java:156 -#, fuzzy msgid "In/Out" -msgstr "Входящего / Выходящего" +msgstr "Направление" #: ../java/src/net/i2p/router/web/TunnelRenderer.java:159 -#, fuzzy msgid "Participants" msgstr "Участники" #: ../java/src/net/i2p/router/web/TunnelRenderer.java:165 -#, fuzzy msgid "Endpoint" -msgstr "Конечная Точка" +msgstr "Конечная точка" #: ../java/src/net/i2p/router/web/TunnelRenderer.java:205 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:211 -#, fuzzy msgid "Build in progress" -msgstr "Опираясь на данном моменте" +msgstr "В процессе построения" #: ../java/src/net/i2p/router/web/TunnelRenderer.java:205 -#, fuzzy msgid "inbound" msgstr "входящий" #: ../java/src/net/i2p/router/web/TunnelRenderer.java:211 -#, fuzzy msgid "outbound" msgstr "исходящий" #: ../java/src/net/i2p/router/web/TunnelRenderer.java:215 -#, fuzzy msgid "No tunnels; waiting for the grace period to end." -msgstr "Нет туннелях, ожидая льготного периода и до конца." +msgstr "Нет туннелей. Ожидаем окончания резервного периода." #: ../java/src/net/i2p/router/web/TunnelRenderer.java:216 -#, fuzzy msgid "in" -msgstr "входящий" +msgstr "(входящий)" #: ../java/src/net/i2p/router/web/TunnelRenderer.java:217 -#, fuzzy msgid "out" -msgstr "исходящий" +msgstr "(исходящий)" #: ../java/src/net/i2p/router/web/TunnelRenderer.java:234 -#, fuzzy msgid "Tunnel Counts By Peer" -msgstr "Тоннель графов По Пиру" +msgstr "Статистика участия пиров в туннелях" #: ../java/src/net/i2p/router/web/TunnelRenderer.java:235 -#, fuzzy msgid "% of total" -msgstr "% всего" +msgstr "% от всех" #: ../java/src/net/i2p/router/web/TunnelRenderer.java:235 -#, fuzzy -msgid "Expl. + Client" -msgstr "Разведочной + Клиентский" +msgid "Our Tunnels" +msgstr "Наших туннелей" #: ../java/src/net/i2p/router/web/TunnelRenderer.java:235 -#, fuzzy -msgid "Part. from + to" -msgstr "Участие от + до" +msgid "Participating Tunnels" +msgstr "Транзитных туннелей" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:253 +msgid "Totals" +msgstr "Всего" #: ../java/strings/Strings.java:12 -#, fuzzy msgid "addressbook" -msgstr "адресная книжка" +msgstr "адресная книга" #: ../java/strings/Strings.java:13 -#, fuzzy msgid "i2psnark" -msgstr "i2psnark" +msgstr "i2psnark (bittorrent-клиент)" #: ../java/strings/Strings.java:14 -#, fuzzy msgid "i2ptunnel" -msgstr "i2p-туннель" +msgstr "менеджер туннелей i2p" +# This term intentionally left in English #: ../java/strings/Strings.java:15 -#, fuzzy msgid "susimail" -msgstr "susi-почта" +msgstr "susimail (почтовый клиент)" +# This term intentionally left in English #: ../java/strings/Strings.java:16 -#, fuzzy msgid "susidns" msgstr "susidns" #: ../java/strings/Strings.java:17 -#, fuzzy msgid "routerconsole" -msgstr "маршрутизатор-консоли" +msgstr "консоль маршрутизатора i2p" #: ../java/strings/Strings.java:22 -#, fuzzy msgid "Web console" msgstr "Веб-консоль" #: ../java/strings/Strings.java:23 -#, fuzzy msgid "SAM application bridge" -msgstr "Мост приложения SAM" +msgstr "интерфейс SAM" #: ../java/strings/Strings.java:24 -#, fuzzy msgid "Application tunnels" -msgstr "Применение туннелей" +msgstr "Клиентские туннели" #: ../java/strings/Strings.java:25 -#, fuzzy msgid "My eepsite web server" -msgstr "Мой веб-сервер «eepsite»" +msgstr "i2p-вебсервер (eepsite)" #: ../java/strings/Strings.java:26 -#, fuzzy msgid "I2P webserver (eepsite)" -msgstr "Мой веб-сервер «eepsite»" +msgstr "i2p-вебсервер (eepsite)" #: ../java/strings/Strings.java:27 -#, fuzzy msgid "Browser launch at startup" -msgstr "Запуск браузера при запуске I2P" +msgstr "Запуск браузера при старте I2P" #: ../java/strings/Strings.java:28 -#, fuzzy msgid "BOB application bridge" -msgstr "Мост приложения BOB" +msgstr "интерфейс BOB" #: ../java/strings/Strings.java:30 -#, fuzzy msgid "Open Router Console in web browser at startup" -msgstr "Открыть консоль маршрутизатора в веб-браузере при запуске" +msgstr "Открыть консоль маршрутизатора в веб-браузере при старте I2P" #: ../java/strings/Strings.java:37 -#, fuzzy msgid "IRC proxy" -msgstr "IRC прокси" +msgstr "IRC-прокси" #: ../java/strings/Strings.java:38 -#, fuzzy msgid "eepsite" -msgstr "eepsite" +msgstr "i2p-сайт" #: ../java/strings/Strings.java:39 -#, fuzzy msgid "I2P webserver" -msgstr "I2P web-server" +msgstr "i2p-вебсервер" #: ../java/strings/Strings.java:40 -#, fuzzy msgid "HTTP Proxy" -msgstr "HTTP Прокси" +msgstr "HTTP-прокси" #: ../java/strings/Strings.java:42 -#, fuzzy msgid "eepProxy" -msgstr "eep-Прокси" +msgstr "I2P-прокси" #: ../java/strings/Strings.java:43 -#, fuzzy msgid "ircProxy" -msgstr "irc-Прокси" +msgstr "IRC-прокси" +# This term intentionally left in English #: ../java/strings/Strings.java:45 -#, fuzzy msgid "I2PSnark" msgstr "I2PSnark" +# This term intentionally left in English #: ../java/strings/Strings.java:47 -#, fuzzy msgid "iMule" msgstr "iMule" #: ../java/strings/Strings.java:51 -#, fuzzy msgid "classic" msgstr "классическая" #: ../java/strings/Strings.java:52 -#, fuzzy msgid "dark" -msgstr "темная" +msgstr "тёмная" #: ../java/strings/Strings.java:53 -#, fuzzy msgid "light" msgstr "светлая" #: ../java/strings/Strings.java:54 -#, fuzzy msgid "midnight" msgstr "полуночная" +#: ../java/strings/Strings.java:57 +msgid "Bandwidth" +msgstr "Трафик" + +#: ../java/strings/Strings.java:58 +msgid "BandwidthLimiter" +msgstr "Ограничитель скорости" + +#: ../java/strings/Strings.java:59 +msgid "ClientMessages" +msgstr "Клиентские сообщения" + +#: ../java/strings/Strings.java:60 +msgid "Encryption" +msgstr "Шифрование" + +# This term intentionally left in English +#: ../java/strings/Strings.java:61 +msgid "i2cp" +msgstr "i2cp" + +# This term intentionally left in English +#: ../java/strings/Strings.java:63 +msgid "InNetPool" +msgstr "InNetPool" + +#: ../java/strings/Strings.java:64 +msgid "JobQueue" +msgstr "Очередь заданий" + +#: ../java/strings/Strings.java:65 +msgid "NetworkDatabase" +msgstr "Сетевая база данных" + +# This term intentionally left in English +#: ../java/strings/Strings.java:66 +msgid "ntcp" +msgstr "ntcp" + +# This term intentionally left in English +#: ../java/strings/Strings.java:69 +msgid "Stream" +msgstr "Stream" + +# This term intentionally left in English +#: ../java/strings/Strings.java:70 +msgid "Throttle" +msgstr "Throttle" + +#: ../java/strings/Strings.java:71 +msgid "Transport" +msgstr "Транспортные протоколы" + +# This term intentionally left in English +#: ../java/strings/Strings.java:73 +msgid "udp" +msgstr "udp" + #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:106 -#, fuzzy msgid "config networking" -msgstr "конфигурация сети" +msgstr "настройки сети" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:217 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:218 @@ -3499,6 +3039,7 @@ msgstr "конфигурация сети" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/debug_jsp.java:220 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:228 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/graphs_jsp.java:217 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005fru_jsp.java:220 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_jsp.java:220 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/index_jsp.java:223 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/jobs_jsp.java:216 @@ -3509,11 +3050,10 @@ msgstr "конфигурация сети" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/peers_jsp.java:216 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/profiles_jsp.java:216 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/stats_jsp.java:216 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/summaryframe_jsp.java:236 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/summaryframe_jsp.java:235 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/tunnels_jsp.java:216 -#, fuzzy msgid "Refresh (s)" -msgstr "Обновить (сек)" +msgstr "Интервал автообновления
      панели (сек.)" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:221 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:222 @@ -3529,6 +3069,7 @@ msgstr "Обновить (сек)" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/debug_jsp.java:224 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:232 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/graphs_jsp.java:221 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005fru_jsp.java:224 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_jsp.java:224 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/index_jsp.java:227 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/jobs_jsp.java:220 @@ -3539,1323 +3080,1091 @@ msgstr "Обновить (сек)" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/peers_jsp.java:220 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/profiles_jsp.java:220 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/stats_jsp.java:220 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/summaryframe_jsp.java:239 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/summaryframe_jsp.java:238 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/tunnels_jsp.java:220 -#, fuzzy msgid "Enable" -msgstr "Включать" +msgstr "Включить" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:241 -#, fuzzy msgid "I2P Network Configuration" -msgstr "I2P Настройке Сети" +msgstr "Настройки сетевых свойств I2P" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:297 -#, fuzzy msgid "Bandwidth limiter" -msgstr "Ограничитель диапазона частот" +msgstr "Ограничение скорости" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:299 -#, fuzzy msgid "I2P will work best if you configure your rates to match the speed of your internet connection." -msgstr "I2P будет работать лучше, если Вы настроите частоту для подбора соответствующей скорости подсоединения к Интернету." +msgstr "I2P будет работать лучше, если Вы настроите ограничение скорости в соответствии со скоростью Вашего подключения к Интернету." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:303 -#, fuzzy msgid "KBps In" -msgstr "Кбит/сек Загруженное" +msgstr "Килобайт/секунду (на приём)" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:317 -#, fuzzy msgid "KBps Out" -msgstr "Кбит/сек Закаченное" +msgstr "Килобайт/секунду (на отдачу)" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:333 -#, fuzzy msgid "Share" -msgstr "Поделено" +msgstr "Доля транзитного трафика" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:340 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:307 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:303 -#, fuzzy msgid "NOTE" -msgstr "ЗАМЕТЬТЕ" +msgstr "ПРИМЕЧАНИЕ" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:342 -#, fuzzy, java-format +#, java-format msgid "You have configured I2P to share only {0} KBps." -msgstr "Вы настроили протокол I2P, чтоб использовать только {0} килобит информации за секунду." +msgstr "Вы настроили очень низкий лимит для транзитного трафика (всего {0} килобайт/секунду)." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:345 -#, fuzzy msgid "I2P requires at least 12KBps to enable sharing. " -msgstr "I2P требует, по крайней мере 12KBps чтобы поделить трафик. " +msgstr "I2P нужно как минимум 12 килобайт/секунду для включения этой функции. " #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:346 -#, fuzzy msgid "Please enable sharing (participating in tunnels) by configuring more bandwidth. " -msgstr "Пожалуйста, включите поделен трафик (участие в туннелях), настроя больше пропускной способностью. " +msgstr "Пожалуйста, повысьте долю транзитного трафика. " #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:347 -#, fuzzy msgid "It improves your anonymity by creating cover traffic, and helps the network." -msgstr "Это улучшает вашу анонимность создавая покрытия трафика, а также помогает в сети." +msgstr "Это одновременно повысит Вашу анонимность (благодаря маскирующему транзитному трафику) и поможет сети." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:350 -#, fuzzy, java-format +#, java-format msgid "You have configured I2P to share {0} KBps." -msgstr "Вы настроили протокол I2P, чтоб использовать {0} килобит информации за секунду." +msgstr "Вы задали долю транзитного трафика {0} килобайт/секунду." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:353 -#, fuzzy msgid "The higher the share bandwidth the more you improve your anonymity and help the network." -msgstr "Чем больше пропускная способность входящего/исходящего канала расшаренного ресурса, тем больше Вы поддерживаете анонимность и тем самым помогаете сети." +msgstr "Чем выше доля транзитного трафика, тем выше Ваша анонимность и больше Ваша помощь сети." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:359 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:496 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:504 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:305 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:324 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:324 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:335 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:375 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:343 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:323 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:356 -#, fuzzy msgid "Cancel" -msgstr "Отклонить изменения" +msgstr "Отменить" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:363 -#, fuzzy msgid "IP and Transport Configuration" -msgstr "IP и конфигурации транспорта" +msgstr "Настройки IP и транспортных протоколов" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:365 -#, fuzzy msgid "The default settings will work for most people." -msgstr "Настройки по умолчанию будет работать для большинства людей." +msgstr "Большинству пользователей подойдут настройки по умолчанию." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:367 -#, fuzzy msgid "There is help below." -msgstr "Дополнительную информацию смотрите ниже:" +msgstr "В конце страницы приведена справка по настройкам." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:369 -#, fuzzy msgid "UPnP Configuration" -msgstr "Конфигурация UPnP" +msgstr "Настройки UPnP" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:373 -#, fuzzy msgid "Enable UPnP to open firewall ports" -msgstr "Запустите UPnP, чтоб открыть порты брандмауэра" +msgstr "Использовать UPnP для автоматического открытия портов на брандмауэре/роутере" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:375 -#, fuzzy msgid "UPnP status" msgstr "статус UPnP" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:377 -#, fuzzy msgid "IP Configuration" -msgstr "IP Конфигурация" +msgstr "Настройки IP" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:379 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:441 -#, fuzzy +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:449 msgid "Externally reachable hostname or IP address" -msgstr "Внешне достижимое имя хоста или IP -адрес" +msgstr " Имя хоста или IP-адрес доступные из интернета" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:383 -#, fuzzy msgid "Use all auto-detect methods" -msgstr "Используйте все методы автоматического опознавания" +msgstr "Определять автоматически всеми доступными способами" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:387 -#, fuzzy msgid "Disable UPnP IP address detection" -msgstr "Отключите детектор IP-адреса UPnP" +msgstr "Определять автоматически (без использования UPnP)" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:391 -#, fuzzy msgid "Ignore local interface IP address" -msgstr "Отклоните IP адрес локального интерфейса." +msgstr "Определять автоматически (без использования IP-адресов локальных сетевых интерфейсов)" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:395 -#, fuzzy msgid "Use SSU IP address detection only" -msgstr "Используйте только детектор IP- адреса SSU" +msgstr "Определять автоматически (только через SSU)" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:399 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:459 -#, fuzzy +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:467 msgid "Specify hostname or IP" -msgstr "Установите имя хоста или IP" +msgstr "Задать хост или IP вручную" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:405 -#, fuzzy msgid "Select Interface" -msgstr "Выбирать Интерфейс" +msgstr "Выбрать сетевой интерфейс" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:419 -#, fuzzy msgid "Hidden mode - do not publish IP" -msgstr "Скрытый метод – не разглашайте IP адрес" +msgstr "Скрытый режим, не публиковать IP" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:421 -#, fuzzy msgid "(prevents participating traffic)" -msgstr "(препятствует причастному трафику)" +msgstr "(такой режим предотвращает транзит трафика)" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:423 -#, fuzzy +msgid "Action when IP changes" +msgstr "Действие при смене IP" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:427 +msgid "Laptop mode - Change router identity and UDP port when IP changes for enhanced anonymity" +msgstr "Режим мобильного компьютера: автоматически менять идентификатор маршрутизатора и UDP-порт после смены IP" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:429 +msgid "Experimental" +msgstr "экспериментальный режим, повышает анонимность" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:431 msgid "UDP Configuration:" -msgstr "UDP Конфигурация" +msgstr "Настройки UDP" -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:425 -#, fuzzy +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:433 msgid "UDP port:" -msgstr "UDP Порт:" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:439 -#, fuzzy -msgid "TCP Configuration" -msgstr "TCP Конфигурация" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:445 -#, fuzzy -msgid "Use auto-detected IP address" -msgstr "Используйте только автоматически распознанный IP -адрес" +msgstr "UDP-порт:" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:447 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:479 -#, fuzzy -msgid "currently" -msgstr "в настоящее время" +msgid "TCP Configuration" +msgstr "Настройки TCP" -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:451 -#, fuzzy -msgid "if we are not firewalled" -msgstr "если есть доступ к порту." +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:453 +msgid "Use auto-detected IP address" +msgstr "Использовать автоматически определенный IP-адрес" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:455 -#, fuzzy +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:487 +msgid "currently" +msgstr "сейчас" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:459 +msgid "if we are not firewalled" +msgstr "если входящий порт не заблокирован" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:463 msgid "Always use auto-detected IP address (Not firewalled)" -msgstr "Всегда используйте только автоматически распознанный IP-адрес (а не адрес брандмауэра)" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:465 -#, fuzzy -msgid "Disable inbound (Firewalled)" -msgstr "Отключите входящие (за брандмауэром)" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:469 -#, fuzzy -msgid "Completely disable" -msgstr "Полностью отключите" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:471 -#, fuzzy -msgid "(select only if behind a firewall that throttles or blocks outbound TCP)" -msgstr "(выберете, только если брандмауэр тормозит работу или блокирует выходные данные протокола управления передачей данных)" +msgstr "Всегда использовать автоматически определенный IP-адрес" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:473 -#, fuzzy -msgid "Externally reachable TCP port" -msgstr "Внешне достижимый порт протокола TCP" +msgid "Disable inbound (Firewalled)" +msgstr "Отключить поддержку входящих соединений" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:477 -#, fuzzy -msgid "Use the same port configured for UDP" -msgstr "Используйте тот же порт, настроенный для протокола UDP" +msgid "Completely disable" +msgstr "Полностью отключить поддержку TCP" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:479 +msgid "(select only if behind a firewall that throttles or blocks outbound TCP)" +msgstr "(используйте этот режим только при наличии в системе брандмауэра, который замедляет или блокирует исходящие TCP-соединения)" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:481 +msgid "Externally reachable TCP port" +msgstr "Доступный из интернета TCP-порт" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:485 -#, fuzzy +msgid "Use the same port configured for UDP" +msgstr "Использовать настройки UDP-порта" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:493 msgid "Specify Port" -msgstr "Определите Порт" +msgstr "Задать порт вручную" -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:489 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:342 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:497 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:338 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:329 -#, fuzzy msgid "Note" -msgstr "Заметьте" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:492 -#, fuzzy -msgid "Changing these settings will restart your router." -msgstr "При изменении настроек, происходит перезагрузка маршрутизатора." - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:498 -#, fuzzy -msgid "Configuration Help" -msgstr "Помощь конфигурации" +msgstr "ВНИМАНИЕ" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:500 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:549 -#, fuzzy -msgid "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." -msgstr "Хотя I2P будет прекрасно работать позади большинства брандмауэров, ваша скорость и сетевой интеграции, вероятно, улучшится, если порт I2P направляется для UDP и TCP." - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:502 -#, fuzzy -msgid "If you can, please poke a hole in your firewall to allow unsolicited UDP and TCP packets to reach you." -msgstr "Если можно, сделайте, пожалуйста, отверстие в брандмауэре, чтоб самостоятельно предоставленные UDP и TCP-пакеты могли дойти до Вас." - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:504 -#, fuzzy -msgid "If you can't, I2P supports UPnP (Universal Plug and Play) and UDP hole punching with \"SSU introductions\" to relay traffic." -msgstr "Если не можете, I2P поспособствует тому, чтоб UPnP (набор сетевых протоколов) и отверстие в UDP, проделанное «применением SSU» переключили трафик." +msgid "Changing these settings will restart your router." +msgstr "Изменение этих настрок повлечет перезагрузку I2P маршрутизатора." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:506 -#, fuzzy -msgid "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." -msgstr "Множество из перечисленных опций предназначены для использования в отдельных ситуациях, к примеру, где UPnP работает неверно, или брандмауэр находится вне контроля и причиняет вред." +msgid "Configuration Help" +msgstr "Справка по настройкам сети" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:508 -#, fuzzy +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:557 +msgid "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." +msgstr "Хотя I2P без проблем работает за большинством брандмауэров, скорость и уровень интеграции в сеть будут гораздо лучше, если открыть порт Вашего I2P-маршрутизатора для UDP и TCP соединений из интернета." + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:510 +msgid "If you can, please poke a hole in your firewall to allow unsolicited UDP and TCP packets to reach you." +msgstr "Попробуйте открыть доступ на Вашем брандмауэре для произвольных входящих UDP и TCP пакетов на порт I2P." + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:512 +msgid "If you can't, I2P supports UPnP (Universal Plug and Play) and UDP hole punching with \"SSU introductions\" to relay traffic." +msgstr "Ничего страшного, если такой возможности нет. I2P поддерживает UPnP (Universal Plug and Play) и обход NAT с помощью SSU-посредников." + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:514 +msgid "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." +msgstr "Настройки выше, в основном, предназначены для особых ситуаций. Например, некорректно сработал UPnP или возник конфликт брандмауэра и I2P." + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:516 msgid "Certain firewalls such as symmetric NATs may not work well with I2P." -msgstr "Некоторые брадмауэры, к примеру, симметричные NAT-устройствам (преобразования сетевых адресов) могут и «не сработаться» с I2P." - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:517 -#, fuzzy -msgid "UPnP is used to communicate with Internet Gateway Devices (IGDs) to detect the external IP address and forward ports." -msgstr "UPnP используется для связи с интернет-шлюзом (IGDs), чтоб определять внешний IP-адрес и передовые порты." - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:519 -#, fuzzy -msgid "UPnP support is beta, and may not work for any number of reasons" -msgstr "Поддержка UPnP не испробована, и может не работать по нескольким причинам" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:521 -#, fuzzy -msgid "No UPnP-compatible device present" -msgstr "Отсутствие UPnP- существующее совместимое устройство" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:523 -#, fuzzy -msgid "UPnP disabled on the device" -msgstr "Выключенный UPnP в устройстве" +msgstr "Некоторые виды брандмауэров могут быть частично несовместимы с I2P (например, симметричные NAT)." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:525 -#, fuzzy -msgid "Software firewall interference with UPnP" -msgstr "Взаимодействие программного обеспечения брандмауэра с UPnP" +msgid "UPnP is used to communicate with Internet Gateway Devices (IGDs) to detect the external IP address and forward ports." +msgstr "UPnP используется для взаимодействия с IGD (Internet Gateway Devices) при определении внешнего IP-адреса и переадресации портов." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:527 -#, fuzzy -msgid "Bugs in the device's UPnP implementation" -msgstr "Ошибки при внедрении устройства UPnP" +msgid "UPnP support is beta, and may not work for any number of reasons" +msgstr "Поддержка UPnP находится в разработке (бета-версия). В следующих случаях UPnP возможно не будет работать" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:529 -#, fuzzy -msgid "Multiple firewall/routers in the internet connection path" -msgstr "Разнообразные брандмауэры/маршрутизаторы в способах подсоединения к интернету" +msgid "No UPnP-compatible device present" +msgstr "Не обнаружено UPnP-совместимых устройств" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:531 -#, fuzzy -msgid "UPnP device change, reset, or address change" -msgstr "Замена устройства UPnP, перезагрузка или изменение адреса" +msgid "UPnP disabled on the device" +msgstr "UPnP отключено на устройстве" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:533 -#, fuzzy -msgid "Review the UPnP status here." -msgstr "Обзор статуса UPnP здесь." +msgid "Software firewall interference with UPnP" +msgstr "Программный брандмауэр мешает корректной работе UPnP" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:535 -#, fuzzy -msgid "UPnP may be enabled or disabled above, but a change requires a router restart to take effect." -msgstr "UPnP может быть включено или отключено, но для получения желательного результата изменения требуется перезагрузка маршрутизатора." +msgid "Bugs in the device's UPnP implementation" +msgstr "UPnP в устройстве реализовано с ошибками " #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:537 -#, fuzzy -msgid "Hostnames entered above will be published in the network database." -msgstr "Имена хоста, зарегистрированные выше, будут опубликованы в базе данных сети." +msgid "Multiple firewall/routers in the internet connection path" +msgstr "Несколько маршрутизаторов/брандмауэров на пути к интернету" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:539 -#, fuzzy -msgid "They are not private." -msgstr "Они не являются личными." +msgid "UPnP device change, reset, or address change" +msgstr "Смена/сброс UPnP-устройства или изменение адреса " #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:541 -#, fuzzy -msgid "Also, do not enter a private IP address like 127.0.0.1 or 192.168.1.1." -msgstr "Также, не запишите личный IP-адрес, как 127.0.0.1 или 192.168.1.1." +msgid "Review the UPnP status here." +msgstr "Посмотреть статус UPnP можно тут." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:543 -#, fuzzy -msgid "If you specify the wrong IP address or hostname, or do not properly configure your NAT or firewall, your network performance will degrade substantially." -msgstr "Если Вы установите неправильный IP-адрес или имя хоста, или неправильно сконфигурируете Ваше NAT-устройство или брандмауэр, работа сети будет существенно ухудшаться." +msgid "UPnP may be enabled or disabled above, but a change requires a router restart to take effect." +msgstr "UPnP можно включить/выключить в настройках выше. Настройка вступит в силу только после перезагрузки I2P-маршрутизатора." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:545 -#, fuzzy -msgid "When in doubt, leave the settings at the defaults." -msgstr "Если Вы сомневаетесь, не заходите на настройки." +msgid "Hostnames entered above will be published in the network database." +msgstr "Если Вы задали вручную имена хостов, они будут опубликованы в сетевой базе." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:547 -#, fuzzy -msgid "Reachability Help" -msgstr "Помощь доступности" +msgid "They are not private." +msgstr "Не вводите локальные внутрисетевые имена." -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:552 -#, fuzzy -msgid "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." -msgstr "Если Вы думаете, что открыли Ваш брандмауэр, а протокол I2P все еще думает, что доступа к порту нет, помните, что у Вас могут быть различные брандмауэры, то есть,- и программное обеспечение, и внешние маршрутизаторы аппаратного обеспечения." +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:549 +msgid "Also, do not enter a private IP address like 127.0.0.1 or 192.168.1.1." +msgstr "Также не вводите IP из локальных диапазонов, такие как 127.0.0.1 или 192.168.1.1." + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:551 +msgid "If you specify the wrong IP address or hostname, or do not properly configure your NAT or firewall, your network performance will degrade substantially." +msgstr "Производительность Вашего соединения с I2P-сетью может сильно пострадать, если Вы введете неверный IP-адрес, неверное имя хоста или неправильно настроите NAT/брандмауэр." + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:553 +msgid "When in doubt, leave the settings at the defaults." +msgstr "Если сомневаетесь — оставьте настройки по умолчанию." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:555 -#, fuzzy -msgid "If there is an error, the logs may also help diagnose the problem." -msgstr "Если обнаружится ошибка, текстовые файлы (logs) могут помочь раскрыть сущность проблемы." +msgid "Reachability Help" +msgstr "Справка по статусу сетевой доступности" -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:559 -#, fuzzy -msgid "Your UDP port does not appear to be firewalled." -msgstr "Ваш UDP порт не закрыт" +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:560 +msgid "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." +msgstr "Возможно Вы собственноручно открыли порт на Вашем брандмауэре, а I2P все еще показывает, что порт закрыт. Имейте в виду, что брандмауэров может быть несколько, например, локальный программный и внешний аппаратный." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:563 -#, fuzzy -msgid "Your UDP port appears to be firewalled." -msgstr "Ваш UDP-порт закрыт. Кажеться что ваш UDP порт за брандмауером." - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:565 -#, fuzzy -msgid "As the firewall detection methods are not 100% reliable, this may occasionally be displayed in error." -msgstr "Поскольку методы детектирования брандмауэра не надежны на 100 %, может случайно обнаружиться ошибка." +msgid "If there is an error, the logs may also help diagnose the problem." +msgstr "В случае ошибок журналы могут помочь диагностировать проблему." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:567 -#, fuzzy -msgid "However, if it appears consistently, you should check whether both your external and internal firewalls are open for your port." -msgstr "Однако, если окажется, последовательно, Вы должны убедиться, как внешний и внутренний брандмауэр открыт для вашего порта." - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:569 -#, fuzzy -msgid "I2P will work fine when firewalled, there is no reason for concern. When firewalled, the router uses \"introducers\" to relay inbound connections." -msgstr "Сеть заработает должным образом, если будет закрыт порт, причин для беспокойства нет. Когда доступа к порту нет, маршрутизатор использует «устройство ввода», чтоб ретранслировать входящее соединение." +msgid "Your UDP port does not appear to be firewalled." +msgstr "Ваш UDP-порт доступен извне." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:571 -#, fuzzy -msgid "However, you will get more participating traffic and help the network more if you can open your firewall(s)." -msgstr "Несмотря на это, Вы получите больше сетевого трафика и тем самым поможете работе сети при условии, если откроете брандмауэры." +msgid "Your UDP port appears to be firewalled." +msgstr "Ваш UDP-порт заблокирован брандмауэром и не может принимать входящие соединения." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:573 -#, fuzzy -msgid "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." -msgstr "Если думаете, что Вы все сделали правильно, помните, что у Вас может быть как аппаратное, так и программное оборудование, и что в обходе дополнительного, основного брандмауэра, Вы не можете контролировать." +msgid "As the firewall detection methods are not 100% reliable, this may occasionally be displayed in error." +msgstr "Иногда это сообщение не соответствует действительности (методы обнаружения брандмауэров пока не идеальны)." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:575 -#, fuzzy -msgid "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." -msgstr "Также некоторые маршрутизаторы не могут правильно отсылать TCP и UDP протоколы на один порт, или же они могут иметь иные ограничения или вирусы, которые препятствуют прохождению трафика в I2P." +msgid "However, if it appears consistently, you should check whether both your external and internal firewalls are open for your port." +msgstr "Но если оно появляется постоянно, Вам следует проверить, что на всех брандмауэрах порт для I2P открыт." + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:577 +msgid "I2P will work fine when firewalled, there is no reason for concern. When firewalled, the router uses \"introducers\" to relay inbound connections." +msgstr "Повода для паники нет, I2P сможет работать даже с заблокированным портом при помощи заранее выбранных «посредников» для ретрансляции входящих соединений." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:579 -#, fuzzy -msgid "The router is currently testing whether your UDP port is firewalled." -msgstr "Маршрутизатор проверяет, закрыт ли Ваш UDP порт." +msgid "However, you will get more participating traffic and help the network more if you can open your firewall(s)." +msgstr "С другой стороны, при работе с открытым портом Вы получите гораздо больше транзитного трафика и сможете помочь сети." + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:581 +msgid "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." +msgstr "Возможно Вы собственноручно открыли порт на Вашем брандмауэре, но ошибка всё равно появляется. Имейте в виду, что Вы можете быть одновременно за программным и аппаратным брандмауэрами или за дополнительным корпоративным брандмауэром (который Вы не можете контролировать)." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:583 -#, fuzzy -msgid "The router is not configured to publish its address, therefore it does not expect incoming connections." -msgstr "Маршрутизатор не конфигурируется для публикации адреса, поэтому он не ожидает входящего соединения." - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:585 -#, fuzzy -msgid "WARN - Firewalled and Fast" -msgstr "ПРЕДУПРЕЖДЕНИЕ - За Брандмауэром и Быстрый" +msgid "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." +msgstr "Кроме того, некоторые маршрутизаторы не могут корректно переадресовать одновременно TCP и UDP на один порт или имеют другие ограничения, мешающие нормальному прохождению трафика до I2P." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:587 -#, fuzzy -msgid "You have configured I2P to share more than 128KBps of bandwidth, but you are firewalled." -msgstr "Вы сконфигурировали протокол I2P, чтоб использовать более, чем 128 килобайт в секунду диапазона частоты, но доступа к порту нет." - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:589 -#, fuzzy -msgid "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." -msgstr "Хотя сеть будет должным образом работать в этой конфигурации, если Вы действительно имеете для совместного использования более 128 килобайт в секунду диапазона частот, будет лучше для сети, если б Вы открыли брандмауэр." +msgid "The router is currently testing whether your UDP port is firewalled." +msgstr "Маршрутизатор проверяет возможность принятия входящих соединений на UDP-порт." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:591 -#, fuzzy -msgid "WARN - Firewalled and Floodfill" -msgstr "ПРЕДУПРЕЖДЕНИЕ - За Брандмауэром и Floodfill" +msgid "The router is not configured to publish its address, therefore it does not expect incoming connections." +msgstr "В настройках I2P-маршрутизатора запрещена публикация его адреса, как результат, маршрутизатор не ожидает входящих соединений." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:593 -#, fuzzy -msgid "You have configured I2P to be a floodfill router, but you are firewalled." -msgstr "Вы настроили I2P быть floodfill маршрутизатора, но маршрутизатор за брандмауэром." +msgid "WARN - Firewalled and Fast" +msgstr "ПРЕДУПРЕЖДЕНИЕ - Заблокирован извне и Быстрый" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:595 -#, fuzzy -msgid "For best participation as a floodfill router, you should open your firewall." -msgstr "Для лучшей совместной работы в качестве floodfill маршрутизатора, Вы должны открыть свой брандмауэр." +msgid "You have configured I2P to share more than 128KBps of bandwidth, but you are firewalled." +msgstr "Вы настроили долю транзитного трафика выше 128 килобайт/секунду, при этом у Вас заблокирован входящий порт." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:597 -#, fuzzy -msgid "WARN - Firewalled with Inbound TCP Enabled" -msgstr "ПРЕДУПРЕЖДЕНИЕ - За Брандмауэром и Входящий TCP Включено" +msgid "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." +msgstr "I2P будет работать нормально в такой конфигурации, но Вы можете помочь сети разблокировав входящий порт, если у Вас действительно быстрый интернет." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:599 -#, fuzzy -msgid "You have configured inbound TCP, however your UDP port is firewalled, and therefore it is likely that your TCP port is firewalled as well." -msgstr "Вы сконфигурировали входящий TCP, однако Ваш UDP порт закрыт, поэтому скорее всего Ваш TCP – порт так же закрыт." +msgid "WARN - Firewalled and Floodfill" +msgstr "ПРЕДУПРЕЖДЕНИЕ - Заблокирован извне и Floodfill" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:601 -#, fuzzy -msgid "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." -msgstr "Если Ваш TCP порт закрыт входящим включенным TCP, маршрутизаторы не смогут соединиться с Вами через TCP, т.к. могут повредить сеть." +msgid "You have configured I2P to be a floodfill router, but you are firewalled." +msgstr "Вы настроили I2P работать в режиме floodfill-маршрутизатора, при этом у Вас заблокирован входящий порт." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:603 -#, fuzzy -msgid "Please open your firewall or disable inbound TCP above." -msgstr "Пожалуйста, откройте свой брандмауэр или отключенный входящий порт TCP." +msgid "For best participation as a floodfill router, you should open your firewall." +msgstr "Для оптимальной работы в качестве floodfill-маршрутизатора Вам нужно разблокировать входящий порт." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:605 -#, fuzzy -msgid "WARN - Firewalled with UDP Disabled" -msgstr "ПРЕДУПРЕЖДЕНИЕ - За Брандмауэром и UDP Отключенный" +msgid "WARN - Firewalled with Inbound TCP Enabled" +msgstr "ПРЕДУПРЕЖДЕНИЕ - Заблокирован извне при включенном на вход TCP" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:607 -#, fuzzy -msgid "You have configured inbound TCP, however you have disabled UDP." -msgstr "Вы сконфигурировали входящий TCP, но все равно Вы отключили UDP." +msgid "You have configured inbound TCP, however your UDP port is firewalled, and therefore it is likely that your TCP port is firewalled as well." +msgstr "Вы разрешили входящие TCP-соединения, но при этом Ваш UDP-порт заблокирован, следовательно, скорее всего, TCP-порт тоже заблокирован." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:609 -#, fuzzy -msgid "You appear to be firewalled on TCP, therefore your router cannot accept inbound connections." -msgstr "Вы firewalled on TCP, поэтому Ваш маршрутизатор не может принять входящие соединения." +msgid "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." +msgstr "Если у Вас разрешены входящие TCP-соединения при заблокированном TCP-порте, то другие маршрутизаторы не смогут к Вам подсоединиться по TCP. Это повредит производительности сети. " #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:611 -#, fuzzy -msgid "Please open your firewall or enable UDP." -msgstr "Пожалуйста, откройте свой брандмауер или закройте UDP." +msgid "Please open your firewall or disable inbound TCP above." +msgstr "Пожалуйста, проверьте состояние TCP-порта и разблокируйте его или отключите поддержку входящих TCP-соединений." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:613 -#, fuzzy -msgid "ERR - Clock Skew" -msgstr "ОШИБКА - Часы Отклонение" +msgid "WARN - Firewalled with UDP Disabled" +msgstr "ПРЕДУПРЕЖДЕНИЕ - Заблокирован извне при отключенном UDP" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:615 -#, fuzzy -msgid "Your system's clock is skewed, which will make it difficult to participate in the network." -msgstr "Вашы часы системного времени сбились, что усложнит работу в сети." +msgid "You have configured inbound TCP, however you have disabled UDP." +msgstr "Вы отключили поддержку UDP, однако Ваш TCP-порт заблокирован и в результате Ваш маршрутизатор не может принимать входящие соединения." +# This string intentionally left blank #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:617 -#, fuzzy -msgid "Correct your clock setting if this error persists." -msgstr "Настройте часы, если эта ошибка не исчезает." +msgid "You appear to be firewalled on TCP, therefore your router cannot accept inbound connections." +msgstr " " #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:619 -#, fuzzy +msgid "Please open your firewall or enable UDP." +msgstr "Пожалуйста, разблокируйте порт или включите поддержку UDP." + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:621 +msgid "ERR - Clock Skew" +msgstr "ОШИБКА - Часы сбиты" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:623 +msgid "Your system's clock is skewed, which will make it difficult to participate in the network." +msgstr "Ваши системные часы сильно отстают/спешат. Это помешает Вашему участию в сети." + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:625 +msgid "Correct your clock setting if this error persists." +msgstr "Поправьте настройки времени, если Вы постоянно видите это сообщение об ошибке." + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:627 msgid "ERR - Private TCP Address" msgstr "ОШИБКА - Частный TCP Адрес" -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:621 -#, fuzzy -msgid "You must never advertise an unroutable IP address such as 127.0.0.1 or 192.168.1.1 as your external address." -msgstr "Нельзя разглашать немаршрутизируемый IP –адрес, как 127.0.0.1 или 192.168.1.1 в качестве Вашего внешнего адреса." - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:623 -#, fuzzy -msgid "Correct the address or disable inbound TCP above." -msgstr "Исправьте адрес или отключите входящий TCP сверх." - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:625 -#, fuzzy -msgid "ERR - SymmetricNAT" -msgstr "ОШИБКА - симметрическим NAT" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:627 -#, fuzzy -msgid "I2P detected that you are firewalled by a Symmetric NAT." -msgstr "I2P определила, что порт был закрыт симметрическим NAT." - #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:629 -#, fuzzy -msgid "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." -msgstr "I2P не работает должным образом из-за отсутствия доступа к порту. Возможно, Вы не сможете принять входящее соединение, которое будет ограничивать доступ к сети." +msgid "You must never advertise an unroutable IP address such as 127.0.0.1 or 192.168.1.1 as your external address." +msgstr "Не публикуйте локальные IP-адреса (такие как 127.0.0.1 или 192.168.1.1) в качестве своего внешнего IP-адреса." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:631 -#, fuzzy -msgid "ERR - UDP Port In Use - Set i2np.udp.internalPort=xxxx in advanced config and restart" -msgstr "ОШИБКА - UDP-порта уже используется - Настройте i2np.udp.internalPort=xxxx в advanced config и перезагрузите" +msgid "Correct the address or disable inbound TCP above." +msgstr "Исправьте адрес или отключите поддержку входящих TCP-соединений." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:633 -#, fuzzy -msgid "I2P was unable to bind to port 8887 or other configured port." -msgstr "I2P не мог подсоединиться к порту 8887 или к другому конфигурируемому порту." +msgid "ERR - SymmetricNAT" +msgstr "ОШИБКА - Симметричный NAT" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:635 -#, fuzzy -msgid "Check to see if another program is using the configured port. If so, stop that program or configure I2P to use a different port." -msgstr "Проверьте что другая программа использует настроенный порт. Если да, то остановить программу или настроить I2P использовать другой порт." +msgid "I2P detected that you are firewalled by a Symmetric NAT." +msgstr "I2P обнаружил, что Вы за симметричным NAT." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:637 -#, fuzzy -msgid "This may be a transient error, if the other program is no longer using the port." -msgstr "Может произойти сбой, если другая программа больше не использует этот порт." +msgid "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." +msgstr "I2P не очень хорошо работает за таким типом брандмауэров. Скорее всего Вы не сможете принимать входящие соединения и это снизит эффективность Вашего участия в сети." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:639 -#, fuzzy -msgid "However, a restart is always required after this error." -msgstr "Однако после такой ошибки всегда требуется перезагрузка." +msgid "ERR - UDP Port In Use - Set i2np.udp.internalPort=xxxx in advanced config and restart" +msgstr "ОШИБКА - UDP-порт уже занят - перенастройте i2np.udp.internalPort=xxxx в дополнительных настройках и перезапустите маршрутизатор" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:641 -#, fuzzy -msgid "ERR - UDP Disabled and Inbound TCP host/port not set" -msgstr "ОШИБКА - UDP отключен и входящий TCP / порт не указан" +msgid "I2P was unable to bind to port 8887 or other configured port." +msgstr "I2P не удалось связать порт 8887 (или тот, что у Вас настроен)." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:643 -#, fuzzy -msgid "You have not configured inbound TCP with a hostname and port above, however you have disabled UDP." -msgstr "Вы не сконфигурировали входящий TCP с именем хоста и выше указанным портом, но все равно Вы отключили UDP." +msgid "Check to see if another program is using the configured port. If so, stop that program or configure I2P to use a different port." +msgstr "Проверьте, не занят ли этот порт другим приложением. Если такое приложение нашлось, остановите его или задайте другой порт в настройках I2P." +# This string intentionally left blank #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:645 -#, fuzzy -msgid "Therefore your router cannot accept inbound connections." -msgstr "Следовательно Ваш маршрутизатор не может принять входящее соединение." +msgid "This may be a transient error, if the other program is no longer using the port." +msgstr " " #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:647 -#, fuzzy -msgid "Please configure a TCP host and port above or enable UDP." -msgstr "Пожалуйста, сконфигурируйте хост TCP и выше указанный порт или же включите UDP." +msgid "However, a restart is always required after this error." +msgstr "После возникновения этой ошибки необходим перезапуск I2P." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:649 -#, fuzzy -msgid "ERR - Client Manager I2CP Error - check logs" -msgstr "ОШИБКА - Менеджер Клиентов I2CP Ошибка - проверьте текстовые файлы (logs)" +msgid "ERR - UDP Disabled and Inbound TCP host/port not set" +msgstr "ОШИБКА - UDP отключено и не заданы адрес/порт для входящих TCP-соединений" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:651 -#, fuzzy -msgid "This is usually due to a port 7654 conflict. Check the logs to verify." -msgstr "Обычно это обусловлено конфликтом порта 7654 (ошибка). Проверьте текстовые файлы (logs), чтоб удостовериться." +msgid "You have not configured inbound TCP with a hostname and port above, however you have disabled UDP." +msgstr "Вы не задали адрес/порт для входящих TCP-соединений и одновременно отключили поддержку UDP, в результате Ваш маршрутизатор не может принимать входящие соединения." +# This string intentionally left blank #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:653 -#, fuzzy +msgid "Therefore your router cannot accept inbound connections." +msgstr " " + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:655 +msgid "Please configure a TCP host and port above or enable UDP." +msgstr "Пожалуйста, настройте адрес/порт для TCP или включите поддержку UDP." + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:657 +msgid "ERR - Client Manager I2CP Error - check logs" +msgstr "ОШИБКА - ошибка менеджера I2CP - загляните в журнал ошибок" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:659 +msgid "This is usually due to a port 7654 conflict. Check the logs to verify." +msgstr "Эта ошибка обычно возникает из-за конфликта порта 7654. Загляните в журнал ошибок." + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:661 msgid "Do you have another I2P instance running? Stop the conflicting program and restart I2P." -msgstr "У Вас есть другое выполнение запроса через протокол I2P? Остановите эту программу и перезагрузите I2P." +msgstr "Не запущена ли у вас ещё одна копия I2P? Остановите вызвавшую конфликт программу и перезапустите I2P." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:107 -#, fuzzy msgid "config advanced" -msgstr "расширенные настройки" +msgstr "дополнительные настройки" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:242 -#, fuzzy msgid "I2P Advanced Configuration" -msgstr "I2P Расширенные Настройки" +msgstr "Дополнительные настройки I2P" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:299 -#, fuzzy msgid "Advanced I2P Configuration" -msgstr "Расширенные I2P Настройки" +msgstr "Дополнительные настройки I2P" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:303 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:321 -#, fuzzy msgid "Apply" msgstr "Применить" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:309 -#, fuzzy msgid "Some changes may require a restart to take effect." -msgstr "Может потребоваться перезагрузка системы для того, чтобы некоторые изменения вступили в силу." +msgstr "Для вступления некоторых изменений в силу может потребоваться перезагрузка I2P-маршрутизатора." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:106 -#, fuzzy msgid "config clients" -msgstr "настройка клиента" +msgstr "настройки клиентов" -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:241 -#, fuzzy +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:244 msgid "I2P Client Configuration" -msgstr "I2P Настройка Клиента" +msgstr "Настройки клиентов I2P" -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:306 -#, fuzzy +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:309 msgid "Client Configuration" -msgstr "Настройка Клиента" +msgstr "Настройки клиентов" -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:308 -#, fuzzy +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:311 msgid "The Java clients listed below are started by the router and run in the same JVM." -msgstr "Java-клиенты, приведенные ниже, запускаются маршрутизатором и действуют в одной и той же Java-машине." +msgstr "Перечисленные ниже Java-клиенты запускаются маршрутизатором внутри своей JVM." -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:312 -#, fuzzy +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:315 msgid "To change other client options, edit the file" -msgstr "Для того, чтобы изменить другие пользовательские настройки, выполните редактирование файла" +msgstr "Для изменения других клиентских настроек отредактируйте файл" -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:319 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:331 -#, fuzzy +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:322 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:342 msgid "All changes require restart to take effect." -msgstr "Для того, чтобы данные изменения вступили в силу, выполните перезагрузку I2P." +msgstr "Для вступления изменённых настроек в силу потребуется перезагрузка маршрутизатора." -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:323 -#, fuzzy +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:334 msgid "WebApp Configuration" -msgstr "WebApp Конфигурация" +msgstr "Настройки веб-апплетов" -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:325 -#, fuzzy +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:336 msgid "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)." -msgstr "Веб-приложения Java, перечисленные ниже, запускаются при помощи консольного клиента с веб-интерфейсом и действуют в той же Java-машине, что и маршрутизатор. Обычно это веб-приложения, доступные через консоль маршрутизатора. Они могут быть полными (например, i2psnark), обеспечивающими взаимодействие с внешними клиентами или приложениями, которые должны быть запущены отдельно (например, susidns, i2ptunnel), или же такими, которые не имеют интерфейса вообще (например, addressbook)." +msgstr "Перечисленные ниже Java веб-апплеты запускаются консолью маршрутизатора внутри JVM маршрутизатора. Обычно эти приложения доступны через консоль маршрутизатора. Это могут быть как самостоятельные приложения (например, i2psnark), так и интерфейсы к другим приложениям или клиентам, которые надо включать отдельно (например, susidns, i2ptunnel), либо могут вообще не иметь веб-интерфейса (например, addressbook)." -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:327 -#, fuzzy +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:338 msgid "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." -msgstr "Веб-приложение также можно блокировать посредством удаления файла с расширением .war из папки webappsс веб-приложениями; тем не менее, файл с расширением .war и веб-приложение появятся, когда вы обновите маршрутизатор до более новой версии, так что блокировка веб-приложения является предпочтительной." +msgstr "Веб-апплет также можно отключить, просто удалив .war-файл из директории webapps. Однако при обновлении маршрутизатора и .war-файл и соответствующее приложение будут возвращены на свои места, поэтому отключение веб-апплетов через эту страницу это более корректный способ." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:106 -#, fuzzy msgid "config keyring" -msgstr "конфигурация для устройств хранения данных" +msgstr "настройки ключей" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:228 -#, fuzzy msgid "I2P Keyring Configuration" -msgstr "Конфигурация I2P Для Устройств Хранения Данных" +msgstr "Настройки связки ключей I2P" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:294 -#, fuzzy msgid "The router keyring is used to decrypt encrypted leaseSets." -msgstr "Устройство хранения данных маршрутизатора используется для расшифровки зашифрованных наборов адресов." +msgstr "Маршрутизатор использует связку ключей для дешифровки зашифрованных LeaseSet." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:297 -#, fuzzy msgid "The keyring may contain keys for local or remote encrypted destinations." -msgstr "На устройстве могут содержаться ключи для локальных или удаленных адресов зашифрованных назначений." +msgstr "Связка ключей может хранить ключи как для локальных, так и для удаленных зашифрованных адресов назначения." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:307 -#, fuzzy msgid "Manual Keyring Addition" -msgstr "Ручное Дополнение К Накопителю Информации" +msgstr "Добавление ключей" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:309 -#, fuzzy msgid "Enter keys for encrypted remote destinations here." -msgstr "Введите ключи для зашифрованных удаленных адресов." +msgstr "Здесь добавляются ключи для удаленных адресов назначения." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:312 -#, fuzzy msgid "Keys for local destinations must be entered on the" -msgstr "Ключи для локальных адресов назначения необходимо ввести на" +msgstr "Ключи для локальных адресов назначения настраиваются в" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:314 -#, fuzzy msgid "I2PTunnel page" -msgstr "странице I2PTunnel" +msgstr "Менеджере Туннелей" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:316 -#, fuzzy msgid "Dest. name, hash, or full key" msgstr "Имя адреса назначения, хэш или полный ключ" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:318 -#, fuzzy msgid "Encryption Key" -msgstr "Криптографический ключ" +msgstr "Ключ шифрования" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:107 -#, fuzzy msgid "config logging" -msgstr "настройка журнала" +msgstr "настройки журнала" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:242 -#, fuzzy msgid "I2P Logging Configuration" -msgstr "I2P Настройке Журнала" +msgstr "Настройки журнала I2P" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:299 -#, fuzzy msgid "Configure I2P Logging Options" -msgstr "Опции Записи Конфигурации I2P" +msgstr "Настройки журнала I2P" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:301 -#, fuzzy msgid "Logging filename" -msgstr "Имя файла записи" +msgstr "Файл журнала" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:305 -#, fuzzy msgid "(the symbol '@' will be replaced during log rotation)" -msgstr "(символ «@» будет заменен в процессе сканирования записи)" +msgstr "(во время ротации журнала символ @ будет заменен на номер)" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:307 -#, fuzzy msgid "Log record format" -msgstr "Формат записи системного журнала" +msgstr "Формат записи" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:311 -#, fuzzy msgid "(use 'd' = date, 'c' = class, 't' = thread, 'p' = priority, 'm' = message)" -msgstr "(используйте следующие обозначения: «d» = дата, «c» = класс, «t» = тред, «p» = приоритет, «m» = сообщение)" +msgstr "(d = дата, c = класс, t = тред, p = приоритет, m = сообщение)" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:313 -#, fuzzy msgid "Log date format" -msgstr "Формат даты записи" +msgstr "Формат даты" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:317 -#, fuzzy msgid "('MM' = month, 'dd' = day, 'HH' = hour, 'mm' = minute, 'ss' = second, 'SSS' = millisecond)" -msgstr "(«MM» = месяц, «dd» = день, «HH» = часы, «mm» = минуты, «ss» = секунды, «SSS» = миллисекунды)" +msgstr "(MM = месяц, dd = день, HH = часы, mm = минуты, ss = секунды, SSS = миллисекунды)" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:319 -#, fuzzy msgid "Max log file size" -msgstr "Максимальный размер файла системного журнала" +msgstr "Максимальный размер файла журнала" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:323 -#, fuzzy msgid "Default log level" -msgstr "Уровень записи по умолчанию" +msgstr "Уровень детальности журнала" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:327 -#, fuzzy msgid "(DEBUG and INFO are not recommended defaults, as they will drastically slow down your router)" -msgstr "(настройки DEBUG и INFO не являются рекомендованными по умолчанию, так как они значительно замедляют работу маршрутизатора)" +msgstr "(не рекомендуется использовать уровни DEBUG и INFO для постоянного использования, так как они сильно замедлят работу Вашего маршрутизатора)" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:329 -#, fuzzy msgid "Log level overrides" -msgstr "Редактирование уровня записи" +msgstr "Дополнительные настройки" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:106 -#, fuzzy msgid "config peers" -msgstr "конфигурация пиров" +msgstr "настройки пиров" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:228 -#, fuzzy msgid "I2P Peer Configuration" -msgstr "Конфигурация Пиров I2P" +msgstr "Настройки пиров I2P" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:304 -#, fuzzy msgid "Manual Peer Controls" -msgstr "Ручное Управление Пирами" +msgstr "Ручное управление пирами" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:306 -#, fuzzy msgid "Router Hash" -msgstr "Хэш Маршрутизатора" +msgstr "Хеш маршрутизатора" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:310 -#, fuzzy msgid "Manually Ban / Unban a Peer" -msgstr "ручную запретить / разрешить пиры" +msgstr "Вручную забанить/разбанить этого пира" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:312 -#, fuzzy msgid "Banning will prevent the participation of this peer in tunnels you create." -msgstr "Запрет предотвратит участие данного пира в созданных вами туннелях." +msgstr "Бан запретит участие указанного пира в создаваемых Вами туннелях." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:324 -#, fuzzy msgid "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" -msgstr "Дополнительные потоки могут быть как положительными и отрицательными, оказывающими влияние на вовлечение узлов сети в быстрых узлах и узлах большой мощност. Быстрые узлы используются для клиентских туннелей, а узлы большой мощности используются в некоторых типах поисковых туннелей. Текущие потоки отображены на" +msgstr "Бонусы могут быть положительными и отрицательными и вводятся для управления включением пира в группы «Быстрые» и «Высокоёмкие» (Быстрые пиры используются для построения клиентских туннелей, Высокоёмкие пиры используются для некоторых зондирующих туннелей). Текущие бонусы можно посмотреть на" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:326 -#, fuzzy msgid "profiles page" -msgstr "странице профилей" +msgstr "странице профилей пиров" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:342 -#, fuzzy msgid "Adjust peer bonuses" -msgstr "Настройка дополнительных потоков пиров" +msgstr "Изменить бонусы" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:344 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/profiles_jsp.java:253 -#, fuzzy msgid "Banned Peers" -msgstr "Запрещенные Пиры" +msgstr "Забаненные пиры" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:366 -#, fuzzy msgid "Banned IPs" -msgstr "Запрещенные IP адресы" +msgstr "Забаненные IP-адреса" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:106 -#, fuzzy msgid "config service" -msgstr "конфигурация сервиса" +msgstr "настройки службы" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:228 -#, fuzzy msgid "I2P Service Configuration" -msgstr "Конфигурация Сервиса I2P" +msgstr "Настройки службы I2P" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:284 -#, fuzzy msgid "Shutdown the router" msgstr "Выключить маршрутизатор" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:286 -#, fuzzy msgid "Graceful shutdown lets the router satisfy the agreements it has already made before shutting down, but may take a few minutes." -msgstr "Постепенное выключение позволяет маршрутизатору выполнить запланированные задания до его выключения, но это займет несколько минут." +msgstr "Плавное выключение позволяет маршрутизатору перед остановкой отработать все поставленные задачи, но при этом на процесс выключения потребуется дополнительное время." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:288 -#, fuzzy msgid "If you need to kill the router immediately, that option is available as well." -msgstr "Постепенное выключение позволяет маршрутизатору выполнить запланированные задания до его выключения, но это займет несколько минут." +msgstr "Если маршрутизатор должен быть выключен немедленно, Вы можете выбрать соответствующую команду." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:298 -#, fuzzy msgid "If you want the router to restart itself after shutting down, you can choose one of the following." -msgstr "Если Вы хотите, чтоб маршрутизатор перезагрузился после выключения, Вы можете выбрать одно из действий." +msgstr "Иногда, Вам нужно перегрузить маршрутизатор (например, после изменения базовых настроек, которые считываются приложением только во время запуска). В этом случае, Вам доступны два варианта. Плавная перезагрузка займет несколько минут (но зато пиры, использующие Ваш маршрутизатор, будут Вам благодарны за терпение). Если Вы не можете ждать, выбирайте немедленную перезагрузку. В случае немедленной перезагрузки маршрутизатор запустится через одну минуту." +# This string intentionally left blank #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:300 -#, fuzzy -msgid "This is useful in some situations" -msgstr "В некоторых случаях это полезно" +msgid "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." +msgstr " " +# This string intentionally left blank #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:302 -#, fuzzy -msgid "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." -msgstr "к примеру, если Вы поменяли некоторые настройки, которые приложения-клиенты читают только при запуске, такие как пароль консоля маршрутизатора или прослушивание интерфейса." - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:304 -#, fuzzy msgid "A graceful restart will take a few minutes (but your peers will appreciate your patience), while a hard restart does so immediately." -msgstr "Постепенное выключение будет длиться несколько минут (но твои пиры будут благодарны за твое терпение), а жесткая перезагрузка делает это незамедлительно." +msgstr " " -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:306 -#, fuzzy +# This string intentionally left blank +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:304 msgid "After tearing down the router, it will wait 1 minute before starting back up again." -msgstr "После разбора настройки маршрутизатора, пройдет еще 1 минута до загрузки." +msgstr " " + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:314 +msgid "Systray integration" +msgstr "Интеграция в область уведомлений" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:316 -#, fuzzy -msgid "Systray integration" -msgstr "Система лоток интеграции" +msgid "On the windows platform, there is a small application to sit in the system tray, allowing you to view the router's status" +msgstr "Если Вы работаете под Windows, у Вас есть возможность отслеживать статус маршрутизатора через значок в области уведомлений" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:318 -#, fuzzy -msgid "On the windows platform, there is a small application to sit in the system tray, allowing you to view the router's status" -msgstr "На платформе Windows, есть небольшое приложение, чтобы сидеть в системном трее, что позволяет Вам просматривать статус маршрутизатора" +msgid "(later on, I2P client applications will be able to integrate their own functionality into the system tray as well)." +msgstr "(когда-нибудь и клиентские приложения для I2P будут там доступны)." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:320 -#, fuzzy -msgid "(later on, I2P client applications will be able to integrate their own functionality into the system tray as well)." -msgstr "(позднее, I2P приложений клиент сможет интегрировать свои функции в системном трее тоже)" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:322 -#, fuzzy msgid "If you are on windows, you can either enable or disable that icon here." -msgstr "Если вы на Windows, вы можете включить или отключить этот значок здесь." +msgstr "Если Вы пользуетесь I2P под Windows, то здесь Вы можете настроить отображение этого значка." + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:326 +msgid "Run on startup" +msgstr "Автоматический запуск I2P" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:328 -#, fuzzy -msgid "Run on startup" -msgstr "Запуск при старте" +msgid "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." +msgstr "Вы можете настроить автоматическую загрузку маршрутизатора при каждом запуске Windows. В зависимости от выбранной кнопки I2P немедленно установит или удалит свою службу из списка служб Windows." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:330 -#, fuzzy -msgid "You can control whether I2P is run on startup or not by selecting one of the following options" -msgstr "Вы можете управлять ли I2P запускается при запуске или не выбрать один из следующих вариантов" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:332 -#, fuzzy -msgid "I2P will install (or remove) a service accordingly." -msgstr "I2P будет установить (или удалить) услуга, соответственно." - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:334 -#, fuzzy msgid "If you prefer the command line, you can also run the " -msgstr "Если вы предпочитаете командную строку, вы можете также запустить " +msgstr "Если Вам удобно работать через командную строку, попробуйте использовать " -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:344 -#, fuzzy +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:340 msgid "If you are running I2P as service right now, removing it will shut down your router immediately." -msgstr "Если вы используете I2P как сервис на данный момент, удалив будет закрыта маршрутизатор немедленно." +msgstr "Если служба I2P уже была запущена, при выборе варианта \"Не запускать I2P при старте\" маршрутизатор будет моментально остановлен." -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:346 -#, fuzzy +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:342 msgid "You may want to consider shutting down gracefully, as above, then running uninstall_i2p_service_winnt.bat." -msgstr "Вы можете рассмотреть вопрос о закрытии грациозно, как указано выше, затем запустить uninstall_i2p_service_winnt.bat." +msgstr "Возможно лучше плавно остановить маршрутизатор и после этого запустить файл C:\\Program Files\\I2P\\uninstall_i2p_service_winnt.bat." -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:354 -#, fuzzy +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:350 msgid "Debugging" -msgstr "Отладка программы" +msgstr "Отладка" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:352 +msgid "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 wrapper.log." +msgstr "В некоторых случаях для отладки может пригодиться список состояний тредов I2P-маршутизатора. Для получения такого списка нажмите эту кнопку. Список будет сохранен в файле wrapper.log." + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:358 +msgid "Launch browser on router startup?" +msgstr "Запускать браузер при старте I2P?" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:360 -#, fuzzy -msgid "Launch browser on router startup?" -msgstr "Загружать браузер при запуске маршрутизатора?" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:362 -#, fuzzy msgid "I2P's main configuration interface is this web console, so for your convenience I2P can launch a web browser on startup pointing at" -msgstr "Основной интерфейс конфигурации I2P таки веб-консоли, поэтому для вашего удобства I2P может открыть веб-браузер при запуске указывая на" +msgstr "Основной интерфейс настройки I2P это веб-консоль. Здесь можно выбрать автоматическое открытие при запуске маршрутизатора страницы" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:107 -#, fuzzy msgid "config stats" -msgstr "конфигурации статистики" +msgstr "настройки статистики" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:229 -#, fuzzy msgid "I2P Stats Configuration" -msgstr "Конфигурация Статистики I2P" +msgstr "Настройки статистики I2P" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:300 -#, fuzzy msgid "Configure I2P Stat Collection" -msgstr "Конфигурация Сбора Статистики I2P" +msgstr "Настройки сбора статистики I2P" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:302 -#, fuzzy msgid "Enable full stats?" -msgstr "Активировать полную статистику?" +msgstr "Включить полную статистику?" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:309 -#, fuzzy msgid "change requires restart to take effect" -msgstr "для того, чтобы изменения вступили в силу, необходима перезагрузка системы" +msgstr "изменения вступят в силу только после перезагрузки маршрутизатора" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:311 -#, fuzzy msgid "Stat file" msgstr "Файл статистики" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:315 -#, fuzzy msgid "Filter" msgstr "Фильтр" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:317 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:326 -#, fuzzy msgid "toggle all" msgstr "переключить все" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:328 -#, fuzzy msgid "Log" -msgstr "Запись" +msgstr "Журнал" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:330 -#, fuzzy msgid "Graph" -msgstr "Диаграмма" +msgstr "График" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:369 -#, fuzzy msgid "Advanced filter" -msgstr "Дополнительные фильтры" +msgstr "Дополнительный фильтр" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:106 -#, fuzzy msgid "config tunnels" -msgstr "конфигурация туннеля" +msgstr "настройки туннелей" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:241 -#, fuzzy msgid "I2P Tunnel Configuration" -msgstr "Конфигурация Туннеля I2P" +msgstr "Настройки туннелей I2P" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:305 -#, fuzzy msgid "The default settings work for most people." -msgstr "Стандартные настройки действуют в большинстве случаев." +msgstr "Большинству пользователей подойдут настройки по умолчанию. " #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:309 -#, fuzzy msgid "There is a fundamental tradeoff between anonymity and performance." -msgstr "Необходимо сделать выбор между анонимностью и производительностью." +msgstr "Примите во внимание, что между анонимностью и эффективностью есть обратная связь — длинные туннели более анонимны, но хуже работают." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:312 -#, fuzzy msgid "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." -msgstr "Туннели, длина которых составляет более 3 хопов (например, 2 хопа + 0-2 хопа, 3 хопа + 0-1 хоп, 3 хопа + 0-2 хопа), или большое количество + резервное количество, могут значительно уменьшить производительность или надежность." +msgstr " Туннели длиннее 3 хопов, а также большое количество туннелей (как обычных, так и резервных) могут привести к снижению производительности/надежности работы маршрутизатора." +# This string intentionally left blank #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:315 -#, fuzzy msgid "High CPU and/or high outbound bandwidth usage may result." -msgstr "Это также может привести к перегрузке ЦП и/или ухудшению пропускной способности входящего канала." +msgstr " " #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:318 -#, fuzzy msgid "Change these settings with care, and adjust them if you have problems." -msgstr "Будьте внимательны при изменении данных настроек, урегулируйте их в том случае, если возникнут какие-либо проблемы." +msgstr "Осторожно вносите изменения в существующие настройки и возвращайте в положение по умолчанию, если у Вас возникли проблемы." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:332 -#, fuzzy msgid "Exploratory tunnel setting changes are stored in the router.config file." -msgstr "Разведочный туннель изменений параметров хранятся в файле router.config." +msgstr "Настройки зондирующих туннелей сохраняются в файле router.config." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:335 -#, fuzzy msgid "Client tunnel changes are temporary and are not saved." -msgstr "Клиент туннель изменения являются временными и не сохраняются." +msgstr "Настройки клиентских туннелей нигде не сохраняются и действуют только до перезагрузки." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:337 -#, fuzzy msgid "To make permanent client tunnel changes see the" -msgstr "Для постоянных клиентов изменения туннеля см." +msgstr "Для задания перманентных изменений в настройках клиентских туннелей воспользуйтесь" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:339 -#, fuzzy msgid "i2ptunnel page" -msgstr "i2ptunnel страницу" +msgstr "менеджером туннелей" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:106 -#, fuzzy msgid "config UI" -msgstr "конфигурации интерфейса" +msgstr "настройки интерфейса" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:241 -#, fuzzy msgid "I2P UI Configuration" -msgstr "I2P Настройка Пользовательского Интерфейса" +msgstr "Настройки пользовательского интерфейса I2P" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:291 -#, fuzzy msgid "Router Console Theme" -msgstr "Тема Консоля Маршрутизатора" +msgstr "Тема оформления консоли маршрутизатора" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:309 -#, fuzzy msgid "Theme selection disabled for Internet Explorer, sorry." -msgstr "Выбор тем отключена для Internet Explorer, извините." +msgstr "Переключатель тем отключен для Internet Explorer, извините" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:311 -#, fuzzy msgid "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." -msgstr "Если вы не используете IE, то, скорее всего, ваш браузер притворяется IE, пожалуйста, настроить Ваш браузер (или прокси-сервера), чтобы использовать различные User Agent String, если вы хотите получить доступ к консоли темам." +msgstr "Если вы не используете IE, то, скорее всего, Ваш браузер сконфигурирован представляться как IE. Пожалуйста измените строку User-Agent в настройках Вашего браузера (или прокси-сервера), если хотите использовать темы оформления" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:315 -#, fuzzy msgid "Router Console Language" -msgstr "Язык Маршрутизатора Консоля" +msgstr "Язык консоли маршрутизатора" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:319 -#, fuzzy msgid "Please contribute to the router console translation project! Contact the developers on IRC #i2p to help." -msgstr "Пожалуйста, помогите маршрутизатор консоли проект по переводу! Свяжете с разработчиками на IRC # I2P помочь." +msgstr "Пожалуйста, помогите проекту перевода консоли маршрутизатора! Разработчики доступны для связи на IRC-канале #i2p" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:106 -#, fuzzy msgid "config update" -msgstr "обновленная конфигурация" +msgstr "настройки обновления" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:228 -#, fuzzy msgid "I2P Update Configuration" -msgstr "Обновленная Конфигурация I2P" +msgstr "Настройки обновлений I2P" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:300 -#, fuzzy msgid "Check for I2P and news updates" -msgstr "Проверьте данные I2P и обновление новостей" +msgstr "Настройки проверки обновлений и новостей I2P" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:302 -#, fuzzy msgid "News & I2P Updates" -msgstr "Новости и Обновление I2P" +msgstr "Новости и обновления I2P" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:306 -#, fuzzy msgid "Update In Progress" msgstr "Выполняется обновление" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:314 -#, fuzzy msgid "News URL" -msgstr "Новости URL" +msgstr "URL новостей" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:318 -#, fuzzy msgid "Refresh frequency" -msgstr "Частота обновления" +msgstr "Интервал проверки" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:322 -#, fuzzy msgid "Update policy" -msgstr "Обновление конфигурации" +msgstr "Режим обновления" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:326 -#, fuzzy msgid "Update through the eepProxy?" -msgstr "Обновление через eep-Прокси?" +msgstr "Обновлять через I2P-прокси?" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:330 -#, fuzzy msgid "eepProxy host" -msgstr "eep-Прокси хост" +msgstr "Адрес I2P-прокси" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:334 -#, fuzzy msgid "eepProxy port" -msgstr "eep-Прокси порт" +msgstr "Порт I2P-прокси" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:338 -#, fuzzy msgid "Update URLs" -msgstr "Обновления URL-адресы" +msgstr "URL обновлений" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:342 -#, fuzzy msgid "Trusted keys" -msgstr "Доверенные криптографические ключи" +msgstr "Доверенные ключи" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:346 -#, fuzzy msgid "Update with unsigned development builds?" -msgstr "Обновить беззнаковой тестовой сборкой?" +msgstr "Обновлять до неподписанной тестовой сборки?" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:350 -#, fuzzy msgid "Unsigned Build URL" -msgstr "Беззнаковая тестовая сборка URL" +msgstr "URL неподписанной тестовой сборки" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:354 -#, fuzzy msgid "Save" msgstr "Сохранить" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:117 -#, fuzzy msgid "Page Not Found" -msgstr "Страница Не Найдена" +msgstr "Страница не найдена" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:243 -#, fuzzy msgid "Sorry! You appear to be requesting a non-existent Router Console page or resource." -msgstr "Извините! Вы, как представляется, с просьбой о несуществующих Маршрутизатор консоли страницы или ресурса." +msgstr "Страница консоли маршрутизатора, которую вы запросили, не существует." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:245 -#, fuzzy msgid "Error 404" msgstr "Ошибка 404" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:250 -#, fuzzy msgid "not found" msgstr "не найдено" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/graphs_jsp.java:106 -#, fuzzy msgid "graphs" -msgstr "диаграммы" +msgstr "графики" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/graphs_jsp.java:228 -#, fuzzy msgid "I2P Performance Graphs" -msgstr "I2P Диаграммы Производительности" +msgstr "Графики производительности I2P" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/index_jsp.java:105 -#, fuzzy msgid "home" -msgstr "дома" +msgstr "Домашняя страница" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/jobs_jsp.java:105 -#, fuzzy msgid "job queue" -msgstr "очереди заданий" +msgstr "очередь заданий" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/jobs_jsp.java:227 -#, fuzzy msgid "I2P Router Job Queue" -msgstr "Маршрутизатор I2P Очередь Заданий" +msgstr "Очередь заданий маршрутизатора I2P" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:105 -#, fuzzy msgid "logs" -msgstr "логи" +msgstr "журналы" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:227 -#, fuzzy msgid "I2P Router Logs" -msgstr "I2P Маршрутизатор Логи" +msgstr "Журналы маршрутизатора I2P" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:229 -#, fuzzy msgid "I2P Version & Running Environment" -msgstr "I2P Версии & Действуюшая Окружающей Среды" +msgstr "Версия I2P & Информация о среде выполнения" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:231 -#, fuzzy msgid "Please include this information in bug reports" -msgstr "Пожалуйста, включите эту информацию в докладах ошибка" +msgstr "Пожалуйста, добавляйте эту информацию в Ваши сообщения об ошибках" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:267 +msgid "Critical Logs" +msgstr "Журнал критических ошибок" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:271 +msgid "Router Logs" +msgstr "Журнал маршрутизатора" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:277 +msgid "Service (Wrapper) Logs" +msgstr "Журнал службы (wrapper)" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/netdb_jsp.java:105 -#, fuzzy msgid "network database summary" -msgstr "база данных резюме" +msgstr "сетевая база данных" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/netdb_jsp.java:227 -#, fuzzy msgid "I2P Network Database Summary" -msgstr "I2P База Данных Резюме" +msgstr "Обзор сетевой базы данных I2P" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/nowebapp_jsp.java:109 -#, fuzzy msgid "WebApp Not Found" -msgstr "Страница Не Найдена" +msgstr "Веб-апплет не найден" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/nowebapp_jsp.java:231 -#, fuzzy msgid "Web Application Not Running" -msgstr "Применение туннелей" +msgstr "Веб-приложение не запущено" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/nowebapp_jsp.java:233 -#, fuzzy msgid "The requested web application is not running." -msgstr "Предложила веб-приложений не запущено." +msgstr "Запрошенное веб-приложение не запущено." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/nowebapp_jsp.java:235 -#, fuzzy msgid "Please visit the config clients page to start it." -msgstr "Пожалуйста, посетите страницу конфигурации клиента для его запуска." +msgstr "Пожалуйста, запустите его со страницы настроек веб-апплетов." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/peers_jsp.java:105 -#, fuzzy msgid "peer connections" -msgstr "связи пиров" +msgstr "обзор пиров" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/peers_jsp.java:227 -#, fuzzy msgid "I2P Network Peers" -msgstr "I2P Сеть Пиры" +msgstr "Соединения с пирами I2P" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/profiles_jsp.java:105 -#, fuzzy msgid "peer profiles" msgstr "профили пиров" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/profiles_jsp.java:227 -#, fuzzy msgid "I2P Network Peer Profiles" -msgstr "Профили Пиров Сети I2P" +msgstr "Профили пиров сети I2P" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/stats_jsp.java:105 -#, fuzzy msgid "statistics" msgstr "статистика" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/stats_jsp.java:242 -#, fuzzy msgid "I2P Router Statistics" -msgstr "I2P Маршрутизатор Статистика" +msgstr "Статистика маршрутизатора I2P" -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/summaryframe_jsp.java:245 -#, fuzzy, java-format +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/summaryframe_jsp.java:244 +#, java-format msgid "Disable {0}s Refresh" -msgstr "Откл. {0}с. Обновление" +msgstr "Отключить автообновление
      панели ({0} сек.)" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/tunnels_jsp.java:105 -#, fuzzy msgid "tunnel summary" -msgstr "туннель резюме" +msgstr "обзор туннелей" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/tunnels_jsp.java:227 -#, fuzzy msgid "I2P Tunnel Summary" -msgstr "I2P Тоннеля Резюме" - -#, fuzzy -#~ msgid "Depth" -#~ msgstr "Глубина" +msgstr "Обзор туннелей I2P" diff --git a/apps/routerconsole/locale/messages_zh.po b/apps/routerconsole/locale/messages_zh.po index f58ecf519..1a3ef881d 100644 --- a/apps/routerconsole/locale/messages_zh.po +++ b/apps/routerconsole/locale/messages_zh.po @@ -1,4360 +1,4199 @@ -# I2P -# Copyright (C) 2009 The I2P Project -# This file is distributed under the same license as the routerconsole package. -# To contribute translations, see http://www.i2p2.de/newdevelopers -# foo , 2009. -# -msgid "" -msgstr "" -"Project-Id-Version: I2P routerconsole\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-01-02 08:13+0000\n" -"PO-Revision-Date: \n" -"Last-Translator: walking \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Poedit-Language: Chinese\n" -"X-Poedit-Country: CHINA\n" - -#: ../../../router/java/src/net/i2p/router/Blocklist.java:117 -#, java-format -msgid "Banned by router hash: {0}" -msgstr "按路由器指纹封杀:{0}" - -#: ../../../router/java/src/net/i2p/router/Blocklist.java:119 -msgid "Banned by router hash" -msgstr "路由指纹封锁" - -#: ../../../router/java/src/net/i2p/router/Blocklist.java:664 -msgid "IP banned" -msgstr "IP封锁" - -#: ../../../router/java/src/net/i2p/router/Blocklist.java:734 -#, java-format -msgid "IP banned by blocklist.txt entry {0}" -msgstr "按IP黑名单blocklist.txt封杀的节点{0}" - -#: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:91 -msgid "Rejecting tunnels: Shutting down" -msgstr "拒绝共享:准备退出" - -#: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:140 -msgid "Rejecting tunnels: High message delay" -msgstr "拒绝共享:高消息延迟" - -#: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:176 -msgid "Rejecting most tunnels: High number of requests" -msgstr "收紧共享:高请求量" - -#: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:232 -msgid "Rejecting tunnels: Limit reached" -msgstr "拒绝共享:隧道数限额" - -#: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:300 -msgid "Rejecting tunnels: Bandwidth limit" -msgstr "拒绝共享:带宽限额" - -#: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:370 -msgid "Rejecting most tunnels: Bandwidth limit" -msgstr "收紧共享:带宽限额" - -#: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:374 -msgid "Accepting most tunnels" -msgstr "接收多数隧道" - -#: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:376 -msgid "Accepting tunnels" -msgstr "接收共享隧道" - -#: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:486 -msgid "Rejecting tunnels" -msgstr "拒绝参与共享隧道" - -#: ../../../router/java/src/net/i2p/router/transport/GetBidsJob.java:70 -msgid "No transports (hidden or starting up?)" -msgstr "无数据传输(隐身或正在启动)" - -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:450 -msgid "Unreachable on any transport" -msgstr "各传输方式均不可达" - -#: ../../../router/java/src/net/i2p/router/transport/ntcp/EstablishState.java:373 -#: ../../../router/java/src/net/i2p/router/transport/ntcp/EstablishState.java:578 -#, java-format -msgid "Excessive clock skew: {0}" -msgstr "严重时滞:{0}" - -#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:137 -msgid "Dropping tunnel requests: Too slow" -msgstr "忽略共享请求:速度太慢" - -#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:354 -msgid "Dropping tunnel requests: Overloaded" -msgstr "忽略共享请求:路由过载" - -#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:521 -msgid "Rejecting tunnels: Request overload" -msgstr "拒绝共享:请求过多" - -#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:546 -msgid "Rejecting tunnels: Connection limit" -msgstr "拒绝共享:连接受限" - -#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:748 -msgid "Dropping tunnel requests: High load" -msgstr "忽略共享请求:高负载" - -#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:757 -msgid "Dropping tunnel requests: Queue time" -msgstr "忽略共享请求:队列积压" - -#: ../java/build/Countries.java:3 -msgid "Andorra" -msgstr "安道尔" - -#: ../java/build/Countries.java:4 -msgid "United Arab Emirates" -msgstr "阿联酋" - -#: ../java/build/Countries.java:5 -msgid "Afghanistan" -msgstr "阿富汗" - -#: ../java/build/Countries.java:6 -msgid "Antigua and Barbuda" -msgstr "安提瓜与巴布达" - -#: ../java/build/Countries.java:7 -msgid "Anguilla" -msgstr "安格拉" - -#: ../java/build/Countries.java:8 -msgid "Albania" -msgstr "阿尔巴尼亚" - -#: ../java/build/Countries.java:9 -msgid "Armenia" -msgstr "亚美尼亚" - -#: ../java/build/Countries.java:10 -msgid "Netherlands Antilles" -msgstr "荷兰属地" - -#: ../java/build/Countries.java:11 -msgid "Angola" -msgstr "安哥拉" - -#: ../java/build/Countries.java:12 -msgid "Antarctica" -msgstr "南极洲" - -#: ../java/build/Countries.java:13 -msgid "Argentina" -msgstr "阿根廷" - -#: ../java/build/Countries.java:14 -msgid "American Samoa" -msgstr "东萨摩亚" - -#: ../java/build/Countries.java:15 -msgid "Austria" -msgstr "奥地利" - -#: ../java/build/Countries.java:16 -msgid "Australia" -msgstr "澳大利亚" - -#: ../java/build/Countries.java:17 -msgid "Aruba" -msgstr "阿鲁巴" - -#: ../java/build/Countries.java:19 -msgid "Azerbaijan" -msgstr "阿塞拜疆" - -#: ../java/build/Countries.java:20 -msgid "Bosnia and Herzegovina" -msgstr "波黑" - -#: ../java/build/Countries.java:21 -msgid "Barbados" -msgstr "巴巴多斯" - -#: ../java/build/Countries.java:22 -msgid "Bangladesh" -msgstr "孟加拉" - -#: ../java/build/Countries.java:23 -msgid "Belgium" -msgstr "比利时" - -#: ../java/build/Countries.java:24 -msgid "Burkina Faso" -msgstr "布基纳法索" - -#: ../java/build/Countries.java:25 -msgid "Bulgaria" -msgstr "保加利亚" - -#: ../java/build/Countries.java:26 -msgid "Bahrain" -msgstr "巴林" - -#: ../java/build/Countries.java:27 -msgid "Burundi" -msgstr "不丹" - -#: ../java/build/Countries.java:28 -msgid "Benin" -msgstr "贝宁" - -#: ../java/build/Countries.java:29 -msgid "Bermuda" -msgstr "百慕大" - -#: ../java/build/Countries.java:30 -msgid "Brunei Darussalam" -msgstr "文莱达鲁萨兰" - -#: ../java/build/Countries.java:31 -msgid "Bolivia" -msgstr "玻利维亚" - -#: ../java/build/Countries.java:32 -msgid "Brazil" -msgstr "巴西" - -#: ../java/build/Countries.java:33 -msgid "Bahamas" -msgstr "巴哈马" - -#: ../java/build/Countries.java:34 -msgid "Bhutan" -msgstr "不丹" - -#: ../java/build/Countries.java:35 -msgid "Bouvet Island" -msgstr "布韦群岛" - -#: ../java/build/Countries.java:36 -msgid "Botswana" -msgstr "伯兹瓦纳" - -#: ../java/build/Countries.java:37 -msgid "Belarus" -msgstr "白俄罗斯" - -#: ../java/build/Countries.java:38 -msgid "Belize" -msgstr "伯利兹" - -#: ../java/build/Countries.java:39 -msgid "Canada" -msgstr "加拿大" - -#: ../java/build/Countries.java:40 -msgid "The Democratic Republic of the Congo" -msgstr "刚果" - -#: ../java/build/Countries.java:41 -msgid "Central African Republic" -msgstr "中非" - -#: ../java/build/Countries.java:42 -msgid "Congo" -msgstr "Congo" - -#: ../java/build/Countries.java:43 -msgid "Switzerland" -msgstr "瑞士" - -#: ../java/build/Countries.java:44 -msgid "Cote D'Ivoire" -msgstr "象牙海岸" - -#: ../java/build/Countries.java:45 -msgid "Cook Islands" -msgstr "库克群岛" - -#: ../java/build/Countries.java:46 -msgid "Chile" -msgstr "智利" - -#: ../java/build/Countries.java:47 -msgid "Cameroon" -msgstr "喀麦隆" - -#: ../java/build/Countries.java:48 -msgid "China" -msgstr "中国" - -#: ../java/build/Countries.java:49 -msgid "Colombia" -msgstr "哥伦比亚" - -#: ../java/build/Countries.java:50 -msgid "Costa Rica" -msgstr "哥斯达黎加" - -#: ../java/build/Countries.java:51 -msgid "Serbia and Montenegro" -msgstr "塞尔维亚与黑山" - -#: ../java/build/Countries.java:52 -msgid "Cuba" -msgstr "古巴" - -#: ../java/build/Countries.java:53 -msgid "Cape Verde" -msgstr "佛得角" - -#: ../java/build/Countries.java:54 -msgid "Cyprus" -msgstr "塞浦路斯" - -#: ../java/build/Countries.java:55 -msgid "Czech Republic" -msgstr "捷克" - -#: ../java/build/Countries.java:56 -msgid "Germany" -msgstr "德国" - -#: ../java/build/Countries.java:57 -msgid "Djibouti" -msgstr "吉布提" - -#: ../java/build/Countries.java:58 -msgid "Denmark" -msgstr "丹麦" - -#: ../java/build/Countries.java:59 -msgid "Dominica" -msgstr "多米尼" - -#: ../java/build/Countries.java:60 -msgid "Dominican Republic" -msgstr "多米尼加联邦" - -#: ../java/build/Countries.java:61 -msgid "Algeria" -msgstr "阿尔及利亚" - -#: ../java/build/Countries.java:62 -msgid "Ecuador" -msgstr "厄瓜多尔" - -#: ../java/build/Countries.java:63 -msgid "Estonia" -msgstr "爱沙尼亚" - -#: ../java/build/Countries.java:64 -msgid "Egypt" -msgstr "埃及" - -#: ../java/build/Countries.java:65 -msgid "Eritrea" -msgstr "厄立特里亚" - -#: ../java/build/Countries.java:66 -msgid "Spain" -msgstr "西班牙" - -#: ../java/build/Countries.java:67 -msgid "Ethiopia" -msgstr "埃塞俄比亚" - -#: ../java/build/Countries.java:68 -msgid "Finland" -msgstr "芬兰" - -#: ../java/build/Countries.java:69 -msgid "Fiji" -msgstr "斐济" - -#: ../java/build/Countries.java:70 -msgid "Falkland Islands (Malvinas)" -msgstr "福克兰群岛" - -#: ../java/build/Countries.java:71 -msgid "Federated States of Micronesia" -msgstr "密克罗尼西亚" - -#: ../java/build/Countries.java:72 -msgid "Faroe Islands" -msgstr "法罗群岛" - -#: ../java/build/Countries.java:73 -msgid "France" -msgstr "法国" - -#: ../java/build/Countries.java:74 -msgid "Gabon" -msgstr "加蓬" - -#: ../java/build/Countries.java:75 -msgid "United Kingdom" -msgstr "英国" - -#: ../java/build/Countries.java:76 -msgid "Grenada" -msgstr "格林纳达" - -#: ../java/build/Countries.java:77 -msgid "Georgia" -msgstr "格鲁吉亚" - -#: ../java/build/Countries.java:78 -msgid "French Guiana" -msgstr "圭亚那" - -#: ../java/build/Countries.java:79 -msgid "Ghana" -msgstr "加纳" - -#: ../java/build/Countries.java:80 -msgid "Gibraltar" -msgstr "直布罗陀" - -#: ../java/build/Countries.java:81 -msgid "Greenland" -msgstr "格陵兰群岛" - -#: ../java/build/Countries.java:82 -msgid "Gambia" -msgstr "冈比亚" - -#: ../java/build/Countries.java:83 -msgid "Guinea" -msgstr "几内亚" - -#: ../java/build/Countries.java:84 -msgid "Guadeloupe" -msgstr "瓜德罗普岛" - -#: ../java/build/Countries.java:85 -msgid "Equatorial Guinea" -msgstr "赤道几内亚" - -#: ../java/build/Countries.java:86 -msgid "Greece" -msgstr "希腊" - -#: ../java/build/Countries.java:87 -msgid "South Georgia and the South Sandwich Islands" -msgstr "南乔治亚岛和南桑德韦奇岛" - -#: ../java/build/Countries.java:88 -msgid "Guatemala" -msgstr "危地马拉" - -#: ../java/build/Countries.java:89 -msgid "Guam" -msgstr "关岛" - -#: ../java/build/Countries.java:90 -msgid "Guinea-Bissau" -msgstr "几内亚比绍" - -#: ../java/build/Countries.java:91 -msgid "Guyana" -msgstr "圭亚那" - -#: ../java/build/Countries.java:92 -msgid "Hong Kong" -msgstr "香港" - -#: ../java/build/Countries.java:93 -msgid "Honduras" -msgstr "洪都拉斯" - -#: ../java/build/Countries.java:94 -msgid "Croatia" -msgstr "克罗蒂亚" - -#: ../java/build/Countries.java:95 -msgid "Haiti" -msgstr "海地" - -#: ../java/build/Countries.java:96 -msgid "Hungary" -msgstr "匈牙利" - -#: ../java/build/Countries.java:97 -msgid "Indonesia" -msgstr "印尼" - -#: ../java/build/Countries.java:98 -msgid "Ireland" -msgstr "爱尔兰" - -#: ../java/build/Countries.java:99 -msgid "Israel" -msgstr "以色列" - -#: ../java/build/Countries.java:101 -msgid "India" -msgstr "印度" - -#: ../java/build/Countries.java:102 -msgid "British Indian Ocean Territory" -msgstr "英属印度洋地区" - -#: ../java/build/Countries.java:103 -msgid "Iraq" -msgstr "伊拉克" - -#: ../java/build/Countries.java:104 -msgid "Islamic Republic of Iran" -msgstr "伊朗" - -#: ../java/build/Countries.java:105 -msgid "Iceland" -msgstr "冰岛" - -#: ../java/build/Countries.java:106 -msgid "Italy" -msgstr "意大利" - -#: ../java/build/Countries.java:108 -msgid "Jamaica" -msgstr "牙买加" - -#: ../java/build/Countries.java:109 -msgid "Jordan" -msgstr "约旦" - -#: ../java/build/Countries.java:110 -msgid "Japan" -msgstr "日本" - -#: ../java/build/Countries.java:111 -msgid "Kenya" -msgstr "肯尼亚" - -#: ../java/build/Countries.java:112 -msgid "Kyrgyzstan" -msgstr "吉尔吉斯斯坦" - -#: ../java/build/Countries.java:113 -msgid "Cambodia" -msgstr "柬埔塞" - -#: ../java/build/Countries.java:114 -msgid "Kiribati" -msgstr "基里巴斯" - -#: ../java/build/Countries.java:115 -msgid "Comoros" -msgstr "科摩罗" - -#: ../java/build/Countries.java:116 -msgid "Saint Kitts and Nevis" -msgstr "圣克里斯多福与尼维斯" - -#: ../java/build/Countries.java:117 -msgid "Republic of Korea" -msgstr "韩国" - -#: ../java/build/Countries.java:118 -msgid "Kuwait" -msgstr "科威特" - -#: ../java/build/Countries.java:119 -msgid "Cayman Islands" -msgstr "开曼群岛" - -#: ../java/build/Countries.java:120 -msgid "Kazakhstan" -msgstr "哈萨克斯坦" - -#: ../java/build/Countries.java:121 -msgid "Lao People's Democratic Republic" -msgstr "老挝" - -#: ../java/build/Countries.java:122 -msgid "Lebanon" -msgstr "黎巴嫩" - -#: ../java/build/Countries.java:123 -msgid "Saint Lucia" -msgstr "圣露西亚岛" - -#: ../java/build/Countries.java:124 -msgid "Liechtenstein" -msgstr "列支敦士登" - -#: ../java/build/Countries.java:125 -msgid "Sri Lanka" -msgstr "斯里兰卡" - -#: ../java/build/Countries.java:126 -msgid "Liberia" -msgstr "利比里亚" - -#: ../java/build/Countries.java:127 -msgid "Lesotho" -msgstr "莱索托" - -#: ../java/build/Countries.java:128 -msgid "Lithuania" -msgstr "立陶宛" - -#: ../java/build/Countries.java:129 -msgid "Luxembourg" -msgstr "卢森堡" - -#: ../java/build/Countries.java:130 -msgid "Latvia" -msgstr "拉脱维亚" - -#: ../java/build/Countries.java:131 -msgid "Libyan Arab Jamahiriya" -msgstr "利比亚" - -#: ../java/build/Countries.java:132 -msgid "Morocco" -msgstr "摩洛哥" - -#: ../java/build/Countries.java:133 -msgid "Monaco" -msgstr "摩纳哥" - -#: ../java/build/Countries.java:134 -msgid "Republic of Moldova" -msgstr "摩尔多瓦" - -#: ../java/build/Countries.java:137 -msgid "Madagascar" -msgstr "马达加斯加" - -#: ../java/build/Countries.java:138 -msgid "Marshall Islands" -msgstr "马绍尔群岛" - -#: ../java/build/Countries.java:139 -msgid "The Former Yugoslav Republic of Macedonia" -msgstr "前南斯拉夫之马其顿共和国" - -#: ../java/build/Countries.java:140 -msgid "Mali" -msgstr "马里" - -#: ../java/build/Countries.java:141 -msgid "Myanmar" -msgstr "缅甸" - -#: ../java/build/Countries.java:142 -msgid "Mongolia" -msgstr "蒙古" - -#: ../java/build/Countries.java:143 -msgid "Macao" -msgstr "澳门" - -#: ../java/build/Countries.java:144 -msgid "Northern Mariana Islands" -msgstr "北马里亚纳群岛" - -#: ../java/build/Countries.java:145 -msgid "Martinique" -msgstr "马提尼克岛" - -#: ../java/build/Countries.java:146 -msgid "Mauritania" -msgstr "毛里塔尼亚" - -#: ../java/build/Countries.java:147 -msgid "Montserrat" -msgstr "蒙特塞拉特" - -#: ../java/build/Countries.java:148 -msgid "Malta" -msgstr "马尔他" - -#: ../java/build/Countries.java:149 -msgid "Mauritius" -msgstr "毛里求斯" - -#: ../java/build/Countries.java:150 -msgid "Maldives" -msgstr "马尔代夫" - -#: ../java/build/Countries.java:151 -msgid "Malawi" -msgstr "马拉维" - -#: ../java/build/Countries.java:152 -msgid "Mexico" -msgstr "墨西哥" - -#: ../java/build/Countries.java:153 -msgid "Malaysia" -msgstr "马来西亚" - -#: ../java/build/Countries.java:154 -msgid "Mozambique" -msgstr "莫桑比克" - -#: ../java/build/Countries.java:155 -msgid "Namibia" -msgstr "纳米比亚" - -#: ../java/build/Countries.java:156 -msgid "New Caledonia" -msgstr "新喀里多尼亚" - -#: ../java/build/Countries.java:157 -msgid "Niger" -msgstr "尼日尔" - -#: ../java/build/Countries.java:158 -msgid "Norfolk Island" -msgstr "尼加拉瓜" - -#: ../java/build/Countries.java:159 -msgid "Nigeria" -msgstr "尼日利亚" - -#: ../java/build/Countries.java:160 -msgid "Nicaragua" -msgstr "尼加拉瓜" - -#: ../java/build/Countries.java:161 -msgid "Netherlands" -msgstr "荷兰" - -#: ../java/build/Countries.java:162 -msgid "Norway" -msgstr "挪威" - -#: ../java/build/Countries.java:163 -msgid "Nepal" -msgstr "尼泊尔" - -#: ../java/build/Countries.java:164 -msgid "Nauru" -msgstr "瑙鲁" - -#: ../java/build/Countries.java:165 -msgid "Niue" -msgstr "纽埃岛" - -#: ../java/build/Countries.java:166 -msgid "New Zealand" -msgstr "新西兰" - -#: ../java/build/Countries.java:167 -msgid "Oman" -msgstr "阿曼" - -#: ../java/build/Countries.java:168 -msgid "Panama" -msgstr "巴拿马" - -#: ../java/build/Countries.java:169 -msgid "Peru" -msgstr "秘鲁" - -#: ../java/build/Countries.java:170 -msgid "French Polynesia" -msgstr "玻利尼西亚" - -#: ../java/build/Countries.java:171 -msgid "Papua New Guinea" -msgstr "巴布亚新几内亚" - -#: ../java/build/Countries.java:172 -msgid "Philippines" -msgstr "菲律宾" - -#: ../java/build/Countries.java:173 -msgid "Pakistan" -msgstr "巴基斯坦" - -#: ../java/build/Countries.java:174 -msgid "Poland" -msgstr "波兰" - -#: ../java/build/Countries.java:175 -msgid "Saint Pierre and Miquelon" -msgstr "圣皮埃尔岛和密克隆" - -#: ../java/build/Countries.java:176 -msgid "Puerto Rico" -msgstr "波多黎各" - -#: ../java/build/Countries.java:177 -msgid "Palestinian Territory" -msgstr "巴勒斯坦地区" - -#: ../java/build/Countries.java:178 -msgid "Portugal" -msgstr "葡萄牙" - -#: ../java/build/Countries.java:179 -msgid "Palau" -msgstr "帕劳" - -#: ../java/build/Countries.java:180 -msgid "Paraguay" -msgstr "巴拉圭" - -#: ../java/build/Countries.java:181 -msgid "Qatar" -msgstr "卡塔尔" - -#: ../java/build/Countries.java:182 -msgid "Reunion" -msgstr "留尼汪岛" - -#: ../java/build/Countries.java:183 -msgid "Romania" -msgstr "罗马尼亚" - -#: ../java/build/Countries.java:184 -msgid "Serbia" -msgstr "塞尔维亚" - -#: ../java/build/Countries.java:185 -msgid "Russian Federation" -msgstr "俄联邦" - -#: ../java/build/Countries.java:186 -msgid "Rwanda" -msgstr "卢旺达" - -#: ../java/build/Countries.java:187 -msgid "Saudi Arabia" -msgstr "沙特阿拉伯" - -#: ../java/build/Countries.java:188 -msgid "Solomon Islands" -msgstr "所罗门群岛" - -#: ../java/build/Countries.java:189 -msgid "Seychelles" -msgstr "塞舌尔" - -#: ../java/build/Countries.java:190 -msgid "Sudan" -msgstr "苏丹" - -#: ../java/build/Countries.java:191 -msgid "Sweden" -msgstr "瑞典" - -#: ../java/build/Countries.java:192 -msgid "Singapore" -msgstr "新加坡" - -#: ../java/build/Countries.java:193 -msgid "Slovenia" -msgstr "斯洛文尼亚" - -#: ../java/build/Countries.java:194 -msgid "Slovakia" -msgstr "斯洛伐克" - -#: ../java/build/Countries.java:195 -msgid "Sierra Leone" -msgstr "塞拉利昂" - -#: ../java/build/Countries.java:196 -msgid "San Marino" -msgstr "圣马力诺" - -#: ../java/build/Countries.java:197 -msgid "Senegal" -msgstr "塞内加尔" - -#: ../java/build/Countries.java:198 -msgid "Somalia" -msgstr "索马里" - -#: ../java/build/Countries.java:199 -msgid "Suriname" -msgstr "苏里南" - -#: ../java/build/Countries.java:200 -msgid "Sao Tome and Principe" -msgstr "圣多美与普林西比共和国" - -#: ../java/build/Countries.java:201 -msgid "El Salvador" -msgstr "萨尔瓦多" - -#: ../java/build/Countries.java:202 -msgid "Syrian Arab Republic" -msgstr "叙利亚" - -#: ../java/build/Countries.java:203 -msgid "Swaziland" -msgstr "斯威士兰" - -#: ../java/build/Countries.java:204 -msgid "Turks and Caicos Islands" -msgstr "特克斯和凯科斯群岛" - -#: ../java/build/Countries.java:205 -msgid "Chad" -msgstr "乍得" - -#: ../java/build/Countries.java:206 -msgid "French Southern Territories" -msgstr "法属南半球领地" - -#: ../java/build/Countries.java:207 -msgid "Togo" -msgstr "多哥" - -#: ../java/build/Countries.java:208 -msgid "Thailand" -msgstr "泰国" - -#: ../java/build/Countries.java:209 -msgid "Tajikistan" -msgstr "塔吉克斯坦" - -#: ../java/build/Countries.java:210 -msgid "Tokelau" -msgstr "托克劳群岛" - -#: ../java/build/Countries.java:211 -msgid "Timor-Leste" -msgstr "东帝汶" - -#: ../java/build/Countries.java:212 -msgid "Turkmenistan" -msgstr "土库曼斯坦" - -#: ../java/build/Countries.java:213 -msgid "Tunisia" -msgstr "突尼斯" - -#: ../java/build/Countries.java:214 -msgid "Tonga" -msgstr "汤加" - -#: ../java/build/Countries.java:215 -msgid "Turkey" -msgstr "土耳其" - -#: ../java/build/Countries.java:216 -msgid "Trinidad and Tobago" -msgstr "特立尼达和多巴哥" - -#: ../java/build/Countries.java:217 -msgid "Tuvalu" -msgstr "图瓦鲁" - -#: ../java/build/Countries.java:218 -msgid "Taiwan" -msgstr "台湾" - -#: ../java/build/Countries.java:219 -msgid "United Republic of Tanzania" -msgstr "坦桑尼亚" - -#: ../java/build/Countries.java:220 -msgid "Ukraine" -msgstr "乌克兰" - -#: ../java/build/Countries.java:221 -msgid "Uganda" -msgstr "乌干达" - -#: ../java/build/Countries.java:222 -msgid "United States Minor Outlying Islands" -msgstr "美国本土外小岛屿" - -#: ../java/build/Countries.java:223 -msgid "United States" -msgstr "美国" - -#: ../java/build/Countries.java:224 -msgid "Uruguay" -msgstr "乌拉圭" - -#: ../java/build/Countries.java:225 -msgid "Uzbekistan" -msgstr "乌兹别克斯坦" - -#: ../java/build/Countries.java:226 -msgid "Holy See (Vatican City State)" -msgstr "梵地冈" - -#: ../java/build/Countries.java:227 -msgid "Saint Vincent and the Grenadines" -msgstr "圣文森特和格林纳丁斯" - -#: ../java/build/Countries.java:228 -msgid "Venezuela" -msgstr "委内瑞拉" - -#: ../java/build/Countries.java:229 ../java/build/Countries.java:230 -msgid "Virgin Islands" -msgstr "维京群岛" - -#: ../java/build/Countries.java:231 -msgid "Viet Nam" -msgstr "越南" - -#: ../java/build/Countries.java:232 -msgid "Vanuatu" -msgstr "瓦努阿图" - -#: ../java/build/Countries.java:233 -msgid "Wallis and Futuna" -msgstr "瓦利斯群岛和富图纳群岛" - -#: ../java/build/Countries.java:234 -msgid "Samoa" -msgstr "东萨摩亚" - -#: ../java/build/Countries.java:235 -msgid "Yemen" -msgstr "也门" - -#: ../java/build/Countries.java:236 -msgid "Mayotte" -msgstr "马约特" - -#: ../java/build/Countries.java:237 -msgid "South Africa" -msgstr "南非" - -#: ../java/build/Countries.java:238 -msgid "Zambia" -msgstr "赞比亚" - -#: ../java/build/Countries.java:239 -msgid "Zimbabwe" -msgstr "津巴布韦" - -#: ../java/src/net/i2p/router/web/CSSHelper.java:54 -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:30 -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:32 -#: ../java/strings/Strings.java:29 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/index_jsp.java:234 -msgid "I2P Router Console" -msgstr "I2P 路由控制台" - -#: ../java/src/net/i2p/router/web/ConfigAdvancedHandler.java:57 -msgid "Error updating the configuration - please see the error logs" -msgstr "配置更新出错 - 请查看错误日志" - -#: ../java/src/net/i2p/router/web/ConfigAdvancedHandler.java:69 -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:263 -msgid "Configuration saved successfully" -msgstr "设置保存成功" - -#: ../java/src/net/i2p/router/web/ConfigAdvancedHandler.java:71 -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:265 -msgid "" -"Error saving the configuration (applied but not saved) - please see the " -"error logs" -msgstr "配置保存出错(已应用但未保存) - 参见错误日志" - -#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:32 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:321 -msgid "Save Client Configuration" -msgstr "保存客户程序设置" - -#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:36 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:333 -msgid "Save WebApp Configuration" -msgstr "保存 WebApp 设置" - -#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:54 -#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:67 -msgid "Start" -msgstr "启动" - -#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:68 -#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:49 -msgid "Unsupported" -msgstr "未支持的" - -#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:83 -msgid "" -"Client configuration saved successfully - restart required to take effect." -msgstr "客户程序设置保存成功 - 程序重启后生效" - -#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:89 -msgid "Bad client index." -msgstr "客户程序索引无效" - -#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:94 -#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:17 -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:363 -#: ../java/src/net/i2p/router/web/SummaryHelper.java:382 -msgid "Client" -msgstr "客户" - -#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:94 -#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:129 -msgid "started" -msgstr "已启动" - -#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:111 -msgid "" -"WebApp configuration saved successfully - restart required to take effect." -msgstr "WebApp设置保存成功 - 程序重启后生效" - -#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:129 -#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:34 -msgid "WebApp" -msgstr "Web程序" - -#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:131 -msgid "Failed to start" -msgstr "启动失败" - -#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:137 -msgid "Failed to find server." -msgstr "服务器或服务程序查找失败。" - -#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:17 -msgid "Class and arguments" -msgstr "类与参数" - -#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:17 -#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:34 -msgid "Run at Startup?" -msgstr "启动时运行?" - -#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:17 -#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:34 -msgid "Start Now" -msgstr "立即启动" - -#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:34 -msgid "Description" -msgstr "描述" - -#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:18 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:320 -msgid "Add key" -msgstr "添加密钥" - -#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:19 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:322 -msgid "Delete key" -msgstr "删除密钥" - -#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:21 -msgid "You must enter a destination" -msgstr "您必须输入一个目标" - -#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:23 -msgid "You must enter a key" -msgstr "您必须输入一个密钥" - -#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:34 -#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:41 -#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:43 -msgid "Key for" -msgstr "密钥" - -#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:34 -msgid "added to keyring" -msgstr "已加入钥匙环" - -#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:36 -msgid "Invalid destination or key" -msgstr "目标或密钥无效" - -#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:41 -msgid "removed from keyring" -msgstr "已从钥匙环中删除" - -#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:43 -msgid "not found in keyring" -msgstr "在钥匙环未找到" - -#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:45 -msgid "Invalid destination" -msgstr "目标无效" - -#: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:52 -msgid "CRIT" -msgstr "" - -#: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:52 -msgid "DEBUG" -msgstr "" - -#: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:52 -msgid "ERROR" -msgstr "" - -#: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:52 -msgid "INFO" -msgstr "" - -#: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:52 -msgid "WARN" -msgstr "" - -#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:18 -msgid "Network" -msgstr "网络" - -#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:18 -msgid "Service" -msgstr "服务" - -#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:18 -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:86 -#: ../java/strings/Strings.java:72 -msgid "Tunnels" -msgstr "隧道" - -#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:18 -msgid "UI" -msgstr "界面" - -#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:18 -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:202 -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:209 -msgid "Update" -msgstr "更新" - -#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:19 -msgid "Clients" -msgstr "客户端" - -#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:19 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:292 -msgid "Keyring" -msgstr "钥匙环" - -#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:19 -msgid "Logging" -msgstr "日志" - -#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:19 -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:92 -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:227 -#: ../java/strings/Strings.java:67 -msgid "Peers" -msgstr "节点" - -#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:19 -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:293 -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:128 -msgid "Stats" -msgstr "统计" - -#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:20 -msgid "Advanced" -msgstr "高级" - -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:48 -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:261 -#: ../java/src/net/i2p/router/web/ConfigTunnelsHandler.java:35 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:357 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:502 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:333 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:373 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:341 -msgid "Save changes" -msgstr "保存修改" - -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:121 -msgid "Rechecking router reachability..." -msgstr "正在重检查路由连通性..." - -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:150 -msgid "Updating IP address" -msgstr "正在更新IP地址" - -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:168 -msgid "Disabling TCP completely" -msgstr "正在彻底禁用TCP" - -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:172 -msgid "Updating inbound TCP address to" -msgstr "正在更新进站TCP地址至" - -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:176 -msgid "Disabling inbound TCP" -msgstr "正在禁用入站TCP" - -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:178 -msgid "Updating inbound TCP address to auto" -msgstr "正在更新入站TCP地址至" - -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:187 -msgid "Updating inbound TCP port to" -msgstr "正在更新入站TCP端口至" - -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:190 -msgid "Updating inbound TCP port to auto" -msgstr "正在更新入站TCP端口至" - -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:202 -msgid "Updating UDP port from" -msgstr "正在更新UDP端口由" - -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:202 -msgid "to" -msgstr "至" - -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:218 -msgid "Gracefully restarting into Hidden Router Mode" -msgstr "正在平滑重启路由进入隐身模式" - -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:220 -msgid "Gracefully restarting to exit Hidden Router Mode" -msgstr "正在平滑重启路由退出隐身模式" - -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:229 -msgid "Enabling UPnP, restart required to take effect" -msgstr "正在启用UPnP,程序重启后生效" - -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:231 -msgid "Disabling UPnP, restart required to take effect" -msgstr "正在禁用UPnP,程序重启后生效" - -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:239 -msgid "Enabling laptop mode" -msgstr "" - -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:241 -msgid "Disabling laptop mode" -msgstr "" - -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:247 -msgid "Requiring SSU introducers" -msgstr "正在获取SSU中介" - -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:288 -msgid "Gracefully restarting I2P to change published router address" -msgstr "正在平滑重启路由重新发布路由地址" - -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:308 -msgid "Updating bandwidth share percentage" -msgstr "正在更新共享带宽比例" - -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:378 -msgid "Updated bandwidth limits" -msgstr "带宽限制更新完毕" - -#: ../java/src/net/i2p/router/web/ConfigNetHelper.java:39 -#: ../java/src/net/i2p/router/web/ConfigNetHelper.java:47 -#: ../java/src/net/i2p/router/web/ConfigNetHelper.java:50 -#: ../java/src/net/i2p/router/web/ConfigNetHelper.java:57 -#: ../java/src/net/i2p/router/web/ConfigNetHelper.java:60 -msgid "unknown" -msgstr "未知" - -#: ../java/src/net/i2p/router/web/ConfigNetHelper.java:169 -msgid "bits per second" -msgstr "比特/秒" - -#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:20 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:314 -msgid "Ban peer until restart" -msgstr "封杀节点直到重启" - -#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:23 -#, java-format -msgid "Manually banned via {0}" -msgstr "通过{0}手动封锁" - -#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:24 -#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:33 -#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:35 -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:81 -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:187 -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:235 -msgid "Peer" -msgstr "节点" - -#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:24 -msgid "banned until restart" -msgstr "已封锁直到重启" - -#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:27 -#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:38 -#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:59 -msgid "Invalid peer" -msgstr "无效节点" - -#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:28 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:316 -msgid "Unban peer" -msgstr "节点解封" - -#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:33 -msgid "unbanned" -msgstr "已解封" - -#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:35 -msgid "is not currently banned" -msgstr "目前未封锁" - -#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:39 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:322 -msgid "Adjust Profile Bonuses" -msgstr "调整节点评分" - -#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:47 -msgid "Bad speed value" -msgstr "速度值无效" - -#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:52 -msgid "Bad capacity value" -msgstr "容量值无效" - -#: ../java/src/net/i2p/router/web/ConfigRestartBean.java:32 -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:57 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:292 -msgid "Shutdown immediately" -msgstr "立刻关闭" - -#: ../java/src/net/i2p/router/web/ConfigRestartBean.java:36 -msgid "Cancel shutdown" -msgstr "取消关闭" - -#: ../java/src/net/i2p/router/web/ConfigRestartBean.java:37 -msgid "Cancel restart" -msgstr "取消重启" - -#: ../java/src/net/i2p/router/web/ConfigRestartBean.java:39 -msgid "Restart immediately" -msgstr "立刻重启" - -#: ../java/src/net/i2p/router/web/ConfigRestartBean.java:43 -msgid "Restart" -msgstr "重 启" - -#: ../java/src/net/i2p/router/web/ConfigRestartBean.java:46 -msgid "Shutdown" -msgstr "关 闭" - -#: ../java/src/net/i2p/router/web/ConfigRestartBean.java:59 -msgid "Restart imminent" -msgstr "立刻重启" - -#: ../java/src/net/i2p/router/web/ConfigRestartBean.java:61 -msgid "Shutdown imminent" -msgstr "立刻关闭" - -#: ../java/src/net/i2p/router/web/ConfigRestartBean.java:65 -#, java-format -msgid "Shutdown in {0}" -msgstr "{0} 后退出" - -#: ../java/src/net/i2p/router/web/ConfigRestartBean.java:70 -#, java-format -msgid "Restart in {0}" -msgstr "{0} 后重启" - -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:53 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:290 -msgid "Shutdown gracefully" -msgstr "平滑关闭" - -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:56 -msgid "Graceful shutdown initiated" -msgstr "开始平滑关闭" - -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:60 -msgid "Shutdown immediately! boom bye bye bad bwoy" -msgstr "立即关闭!不推荐" - -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:61 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:294 -msgid "Cancel graceful shutdown" -msgstr "取消平滑关闭" - -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:63 -msgid "Graceful shutdown cancelled" -msgstr "平滑关闭已取消" - -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:64 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:308 -msgid "Graceful restart" -msgstr "平滑重启" - -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:67 -msgid "Graceful restart requested" -msgstr "平滑重启已请求" - -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:68 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:310 -msgid "Hard restart" -msgstr "硬重启" - -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:71 -msgid "Hard restart requested" -msgstr "硬重启已请求" - -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:72 -msgid "Rekey and Restart" -msgstr "更换密钥并重启" - -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:73 -msgid "Rekeying after graceful restart" -msgstr "平滑重启后更换密钥" - -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:76 -msgid "Rekey and Shutdown" -msgstr "更换密钥并关闭" - -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:77 -msgid "Rekeying after graceful shutdown" -msgstr "平滑关闭后更换密钥" - -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:80 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:338 -msgid "Run I2P on startup" -msgstr "系统启动时运行I2P" - -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:82 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:340 -msgid "Don't run I2P on startup" -msgstr "系统启动时不运行I2P" - -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:84 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:356 -msgid "Dump threads" -msgstr "" - -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:91 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:324 -msgid "Show systray icon" -msgstr "显示托盘图标" - -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:96 -msgid "System tray icon enabled." -msgstr "系统托盘图标已启用" - -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:98 -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:110 -msgid "System tray icon feature not supported on this platform. Sorry!" -msgstr "您的平台不支持系统托盘图标功能" - -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:101 -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:113 -msgid "Warning: unable to contact the systray manager" -msgstr "警告:与托盘管理器通讯失败" - -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:103 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:326 -msgid "Hide systray icon" -msgstr "隐藏系统图标" - -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:108 -msgid "System tray icon disabled." -msgstr "系统托盘已禁用" - -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:115 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:364 -msgid "View console on startup" -msgstr "程序启动时显示控制台" - -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:117 -msgid "Console is to be shown on startup" -msgstr "启动后显示控制台" - -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:118 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:366 -msgid "Do not view console on startup" -msgstr "启动后不打开控制台" - -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:120 -msgid "Console is not to be shown on startup" -msgstr "启动后不显示控制台" - -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:129 -msgid "Service installed" -msgstr "服务已安装" - -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:131 -msgid "Warning: unable to install the service" -msgstr "警告:无法安装服务" - -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:137 -msgid "Service removed" -msgstr "服务已卸载" - -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:139 -msgid "Warning: unable to remove the service" -msgstr "警告:无法卸载服务" - -#: ../java/src/net/i2p/router/web/ConfigStatsHandler.java:118 -msgid "Stat filter and location updated successfully to" -msgstr "统计数据过滤器及位置成功更新至" - -#: ../java/src/net/i2p/router/web/ConfigStatsHandler.java:120 -msgid "Failed to update the stat filter and location" -msgstr "统计数据过滤器及地址更新失败" - -#: ../java/src/net/i2p/router/web/ConfigStatsHandler.java:121 -msgid "" -"Graph list updated, may take up to 60s to be reflected here and on the Graphs Page" -msgstr "" -"曲线图列表已更新,更新后的内容可能需要最多 60s 的时间才能在这里及 统计图表页面中反映出来。" - -#: ../java/src/net/i2p/router/web/ConfigTunnelsHandler.java:137 -msgid "Updated settings for all pools." -msgstr "隧道池更新完毕" - -#: ../java/src/net/i2p/router/web/ConfigTunnelsHandler.java:142 -msgid "Exploratory tunnel configuration saved successfully." -msgstr "探索隧道设置保存成功。" - -#: ../java/src/net/i2p/router/web/ConfigTunnelsHandler.java:144 -#: ../java/src/net/i2p/router/web/ConfigUIHandler.java:36 -msgid "" -"Error saving the configuration (applied but not saved) - please see the " -"error logs." -msgstr "配置保存出错(已应用但未保存) - 参见错误日志" - -#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:11 -msgid "hop" -msgstr "跳点" - -#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:12 -msgid "tunnel" -msgstr "隧道" - -#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:14 -msgid "hops" -msgstr "跳点" - -#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:15 -msgid "tunnels" -msgstr "隧道" - -#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:26 -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:41 -msgid "Exploratory tunnels" -msgstr "探测隧道" - -#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:46 -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:61 -msgid "Client tunnels for" -msgstr "客户隧道 - " - -#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:69 -msgid "ANONYMITY WARNING - Settings include 0-hop tunnels." -msgstr "匿名性警告 - 设置中包括 0-跳点 隧道" - -#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:74 -msgid "ANONYMITY WARNING - Settings include 1-hop tunnels." -msgstr "匿名性警告 - 设置中包括 1-跳点 隧道" - -#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:77 -msgid "PERFORMANCE WARNING - Settings include very long tunnels." -msgstr "性能警告 - 设置中包括长隧道" - -#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:80 -msgid "PERFORMANCE WARNING - Settings include high tunnel quantities." -msgstr "性能警告 - 设置中包括大量隧道" - -#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:82 -msgid "Inbound" -msgstr "入站" - -#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:82 -msgid "Outbound" -msgstr "出站" - -#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:87 -msgid "Length" -msgstr "长度" - -#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:104 -msgid "Randomization" -msgstr "随机" - -#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:128 -msgid "Quantity" -msgstr "数量" - -#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:145 -msgid "Backup quantity" -msgstr "备用数量" - -#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:167 -msgid "Inbound options" -msgstr "入站选项" - -#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:180 -msgid "Outbound options" -msgstr "出站选项" - -#: ../java/src/net/i2p/router/web/ConfigUIHandler.java:31 -msgid "Theme change saved." -msgstr "主题设置已保存。" - -#: ../java/src/net/i2p/router/web/ConfigUIHandler.java:33 -msgid "Refresh the page to view." -msgstr "刷新页面后查看。" - -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:41 -msgid "English" -msgstr "英语" - -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:41 -msgid "French" -msgstr "法语" - -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:41 -msgid "German" -msgstr "德语" - -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:42 -msgid "Chinese" -msgstr "中文" - -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:42 -msgid "Dutch" -msgstr "荷兰语" - -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:42 -msgid "Russian" -msgstr "俄语" - -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:42 -msgid "Swedish" -msgstr "瑞士语" - -#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:56 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:310 -msgid "Check for updates" -msgstr "检查更新" - -#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:63 -msgid "Update available, attempting to download now" -msgstr "有更新可用,正在尝试下载" - -#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:65 -msgid "Update available, click button on left to download" -msgstr "有更新可用,点左侧按钮下载" - -#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:67 -msgid "No update available" -msgstr "无更新" - -#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:75 -msgid "Updating news URL to" -msgstr "正在更新新闻链接至" - -#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:83 -msgid "Updating proxy host to" -msgstr "正在更新代理主机至" - -#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:91 -msgid "Updating proxy port to" -msgstr "正在更新代理端口至" - -#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:104 -msgid "Updating refresh frequency to" -msgstr "正在更新更新频率为" - -#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:111 -msgid "Updating update policy to" -msgstr "正在更新升级策略为" - -#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:120 -msgid "Updating update URLs." -msgstr "正在更新更新链接至" - -#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:128 -msgid "Updating trusted keys." -msgstr "正在更新可信公钥为" - -#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:136 -msgid "Updating unsigned update URL to" -msgstr "正在更新未签名软件链接至" - -#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:75 -#: ../java/src/net/i2p/router/web/GraphHelper.java:115 -msgid "Never" -msgstr "从不" - -#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:77 -msgid "Every" -msgstr "每" - -#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:90 -#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:92 -msgid "Notify only" -msgstr "只提示" - -#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:95 -#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:97 -msgid "Download and verify only" -msgstr "仅下载并验证" - -#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:101 -#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:103 -msgid "Download, verify, and restart" -msgstr "仅下载、验证并重启" - -#: ../java/src/net/i2p/router/web/GraphHelper.java:107 -msgid "Configure Graph Display" -msgstr "图表显示设置" - -#: ../java/src/net/i2p/router/web/GraphHelper.java:107 -msgid "Select Stats" -msgstr "选择统计项" - -#: ../java/src/net/i2p/router/web/GraphHelper.java:109 -msgid "Periods" -msgstr "周期" - -#: ../java/src/net/i2p/router/web/GraphHelper.java:110 -msgid "Plot averages" -msgstr "事件均值" - -#: ../java/src/net/i2p/router/web/GraphHelper.java:111 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:405 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:336 -msgid "or" -msgstr "或" - -#: ../java/src/net/i2p/router/web/GraphHelper.java:111 -msgid "plot events" -msgstr "事件数量" - -#: ../java/src/net/i2p/router/web/GraphHelper.java:112 -msgid "Image sizes" -msgstr "图像尺寸" - -#: ../java/src/net/i2p/router/web/GraphHelper.java:112 -msgid "width" -msgstr "宽度" - -#: ../java/src/net/i2p/router/web/GraphHelper.java:113 -msgid "height" -msgstr "高度" - -#: ../java/src/net/i2p/router/web/GraphHelper.java:113 -#: ../java/src/net/i2p/router/web/GraphHelper.java:114 -msgid "pixels" -msgstr "像素" - -#: ../java/src/net/i2p/router/web/GraphHelper.java:115 -msgid "Refresh delay" -msgstr "刷新延迟" - -#: ../java/src/net/i2p/router/web/GraphHelper.java:115 -msgid "hour" -msgstr "小时" - -#: ../java/src/net/i2p/router/web/GraphHelper.java:115 -msgid "minute" -msgstr "分钟" - -#: ../java/src/net/i2p/router/web/GraphHelper.java:115 -msgid "minutes" -msgstr "分钟" - -#: ../java/src/net/i2p/router/web/GraphHelper.java:116 -msgid "Redraw" -msgstr "重绘" - -#: ../java/src/net/i2p/router/web/LogsHelper.java:13 -#: ../java/src/net/i2p/router/web/LogsHelper.java:37 -msgid "File location" -msgstr "文件位置" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:59 -msgid "Network Database RouterInfo Lookup" -msgstr "网络数据库 RouterInfo 检索" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:74 -#: ../java/strings/Strings.java:68 -msgid "Router" -msgstr "路由器" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:74 -msgid "not found in network database" -msgstr "在网络数据库概况未找到" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:82 -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:134 -msgid "Network Database Contents" -msgstr "网络数据库内容" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:83 -msgid "View RouterInfo" -msgstr "浏览 RouterInfo" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:84 -msgid "LeaseSets" -msgstr "赁集" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:92 -msgid "LeaseSet" -msgstr "赁集" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:94 -msgid "Local" -msgstr "本地" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:96 -msgid "Unpublished" -msgstr "未发布" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:97 -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:104 -msgid "Destination" -msgstr "目标" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:114 -#, java-format -msgid "Expires in {0}" -msgstr "{0} 后过期" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:116 -#, java-format -msgid "Expired {0} ago" -msgstr "{0}前过期" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:118 -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:156 -msgid "Gateway" -msgstr "网关" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:118 -msgid "Lease" -msgstr "租赁" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:120 -msgid "Tunnel" -msgstr "隧道" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:134 -msgid "View LeaseSets" -msgstr "查看赁集" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:136 -msgid "Not initialized" -msgstr "未初始化" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:145 -msgid "Routers" -msgstr "路由器" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:147 -msgid "Show all routers" -msgstr "显示所有路由器" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:149 -msgid "Show all routers with full stats" -msgstr "显示所有路由及统计" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:184 -msgid "Network Database Router Statistics" -msgstr "NetDb路由器统计" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:190 -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:204 -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:222 -msgid "Count" -msgstr "计数" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:190 -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:154 -msgid "Version" -msgstr "版本" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:204 -msgid "Transports" -msgstr "传输" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:222 -msgid "Country" -msgstr "国家" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:254 -msgid "Our info" -msgstr "我方信息" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:256 -msgid "Peer info for" -msgstr "节点信息" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:260 -msgid "Full entry" -msgstr "完整项" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:266 -#: ../java/src/net/i2p/router/web/SummaryHelper.java:105 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:589 -msgid "Hidden" -msgstr "隐身" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:266 -msgid "Updated" -msgstr "已更新" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:267 -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:270 -#, java-format -msgid "{0} ago" -msgstr "{0}前" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:269 -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:273 -msgid "Published" -msgstr "发布" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:275 -msgid "Address(es)" -msgstr "地址" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:308 -msgid "Hidden or starting up" -msgstr "隐身或正在启动" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:308 -msgid "SSU" -msgstr "" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:308 -msgid "SSU with introducers" -msgstr "使用中介的SSU连接" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:309 -msgid "NTCP" -msgstr "" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:309 -msgid "NTCP and SSU" -msgstr "NTCP 与 SSU" - -#: ../java/src/net/i2p/router/web/NetDbRenderer.java:309 -msgid "NTCP and SSU with introducers" -msgstr "使用中介的NTCP与SSU连接" - -#: ../java/src/net/i2p/router/web/NewsFetcher.java:80 -#, java-format -msgid "News last updated {0} ago." -msgstr "新闻更新于{0}前" - -#: ../java/src/net/i2p/router/web/NewsFetcher.java:86 -#, java-format -msgid "News last checked {0} ago." -msgstr "最近一次查收新闻在{0}前" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:72 -msgid "Peer Profiles" -msgstr "节点信息" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:73 -#, java-format -msgid "Showing {0} recent profiles." -msgstr "显示最近 {0} 个节点信息" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:75 -#, java-format -msgid "Hiding {0} older profiles." -msgstr "隐藏 {0} 个较旧的信息。" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:77 -#, java-format -msgid "Hiding {0} standard profiles." -msgstr "隐藏 {0} 个标准描述。" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:82 -msgid "Groups (Caps)" -msgstr "组(容量)" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:83 -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:251 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:334 -msgid "Speed" -msgstr "速度" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:84 -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:253 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:338 -msgid "Capacity" -msgstr "容量" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:85 -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:255 -msgid "Integration" -msgstr "整合" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:86 -msgid "Status" -msgstr "状态" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:126 -msgid "Fast, High Capacity" -msgstr "高速,高容" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:127 -msgid "High Capacity" -msgstr "高容" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:128 -msgid "Standard" -msgstr "标准" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:129 -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:163 -msgid "Failing" -msgstr "失败" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:131 -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:253 -msgid "Integrated" -msgstr "已整合节点" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:162 -msgid "Banned" -msgstr "已封锁" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:164 -msgid "Unreachable" -msgstr "不可达" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:171 -msgid "Test Fails" -msgstr "测试失败" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:175 -msgid "profile" -msgstr "节点信息" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:184 -msgid "Floodfill and Integrated Peers" -msgstr "种子节点与整合节点" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:188 -msgid "Caps" -msgstr "容量" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:189 -msgid "Integ. Value" -msgstr "" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:190 -msgid "Last Heard About" -msgstr "" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:191 -msgid "Last Heard From" -msgstr "" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:192 -msgid "Last Good Send" -msgstr "上一次发送成功" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:193 -msgid "Last Bad Send" -msgstr "上一次发送失败" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:194 -msgid "10m Resp. Time" -msgstr "10m响应时间" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:195 -msgid "1h Resp. Time" -msgstr "1h响应时间" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:196 -msgid "1d Resp. Time" -msgstr "1d响应时间" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:197 -msgid "Last Good Lookup" -msgstr "上一次查询成功" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:198 -msgid "Last Bad Lookup" -msgstr "上一次查询失败" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:199 -msgid "Last Good Store" -msgstr "上一次保存成功" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:200 -msgid "Last Bad Store" -msgstr "上一次保存失败" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:201 -msgid "1h Fail Rate" -msgstr "1h失败率" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:202 -msgid "1d Fail Rate" -msgstr "1d失败率" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:250 -msgid "Thresholds" -msgstr "临界值" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:252 -msgid "fast peers" -msgstr "高速节点" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:254 -msgid "high capacity peers" -msgstr "高容节点" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:256 -msgid " well integrated peers" -msgstr "整合节点" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:257 -msgid "Definitions" -msgstr "定义" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:258 -msgid "as determined by the profile organizer" -msgstr "由节点描述信息管理器决定" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:258 -msgid "groups" -msgstr "分组" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:259 -msgid "capabilities in the netDb, not used to determine profiles" -msgstr "netDb中的容量,与描述信息无关。" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:259 -msgid "caps" -msgstr "容量" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:260 -msgid "" -"peak throughput (bytes per second) over a 1 minute period that the peer has " -"sustained in a single tunnel" -msgstr "该节点一分钟由单一隧道通过的数据峰值(byte/s)。" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:260 -msgid "speed" -msgstr "速度" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:261 -msgid "capacity" -msgstr "容量" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:261 -msgid "how many tunnels can we ask them to join in an hour?" -msgstr "一小时内路由可以邀请加入的隧道总量" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:262 -msgid "how many new peers have they told us about lately?" -msgstr "最近获知的新节点" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:262 -msgid "integration" -msgstr "整合" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:263 -msgid "is the peer banned, or unreachable, or failing tunnel tests?" -msgstr "是否节点被封禁,不可达,或在隧道测试中失败?" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:263 -msgid "status" -msgstr "状态" - -#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:321 -msgid "n/a" -msgstr "" - -#: ../java/src/net/i2p/router/web/ShitlistRenderer.java:57 -#, java-format -msgid "Temporary ban expiring in {0}" -msgstr "临时封锁{0}后解除" - -#: ../java/src/net/i2p/router/web/ShitlistRenderer.java:59 -#, java-format -msgid "Banned until restart or in {0}" -msgstr "封锁直到重启或{0}后" - -#: ../java/src/net/i2p/router/web/ShitlistRenderer.java:71 -msgid "unban now" -msgstr "立即解封" - -#: ../java/src/net/i2p/router/web/StatsGenerator.java:55 -msgid "GO" -msgstr "" - -#: ../java/src/net/i2p/router/web/StatsGenerator.java:58 -msgid "Statistics gathered during this router's uptime" -msgstr "路由运行时收集的统计数据" - -#: ../java/src/net/i2p/router/web/StatsGenerator.java:61 -msgid "" -"The data gathered is quantized over a 1 minute period, so should just be " -"used as an estimate." -msgstr "所采集数据量化周期为1分钟,仅供参考。" - -#: ../java/src/net/i2p/router/web/StatsGenerator.java:107 -msgid "frequency" -msgstr "更新频率" - -#: ../java/src/net/i2p/router/web/StatsGenerator.java:141 -msgid "No lifetime events" -msgstr "自运行起无事件" - -#: ../java/src/net/i2p/router/web/StatsGenerator.java:153 -msgid "rate" -msgstr "速度" - -#: ../java/src/net/i2p/router/web/StatsGenerator.java:155 -msgid "avg value" -msgstr "均值" - -#: ../java/src/net/i2p/router/web/StatsGenerator.java:184 -msgid "events" -msgstr "事件" - -#: ../java/src/net/i2p/router/web/StatsGenerator.java:190 -msgid "No events" -msgstr "无事件" - -#: ../java/src/net/i2p/router/web/StatsGenerator.java:196 -msgid "lifetime average" -msgstr "总平均值" - -#: ../java/src/net/i2p/router/web/StatsGenerator.java:198 -msgid "peak average" -msgstr "峰值平均值" - -#: ../java/src/net/i2p/router/web/StatsGenerator.java:216 -msgid "lifetime average value" -msgstr "总平均值" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:44 -msgid "" -"Configure startup of clients and webapps (services); manually start dormant " -"services" -msgstr "设置客户程序及Web程序(服务)的启动;手动启动重要服务" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:46 -msgid "I2P Services" -msgstr "I2P 服务" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:52 -msgid "Manage your I2P hosts file here (I2P domain name resolution)" -msgstr "管理您的 I2P HOST表(I2P域名解析表)" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:54 -msgid "Addressbook" -msgstr "地址簿" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:58 -msgid "Built-in anonymous BitTorrent Client" -msgstr "内建的匿名 BitTorrent 客户端" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:60 -msgid "Torrents" -msgstr "匿名BT" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:64 -msgid "Anonymous webmail client" -msgstr "匿名Web邮件客户端" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:66 -msgid "Webmail" -msgstr "匿名邮箱" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:70 -msgid "Anonymous resident webserver" -msgstr "内置的匿名Web服务器" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:72 -msgid "Webserver" -msgstr "匿名主页服务器" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:76 -msgid "Configure I2P Router" -msgstr "设置 I2P 路由器" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:78 -msgid "I2P Internals" -msgstr "I2P内部设置" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:84 -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:348 -msgid "View existing tunnels and tunnel build status" -msgstr "查看现存隧道及隧道的建立状态" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:90 -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:225 -msgid "Show all current peer connections" -msgstr "显示当前所有的节点连接" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:96 -msgid "Show recent peer performance profiles" -msgstr "显示当前节点的性能记录" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:98 -msgid "Profiles" -msgstr "节点信息" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:102 -msgid "Show list of all known I2P routers" -msgstr "包含所有已知I2P路由器的列表" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:104 -msgid "NetDB" -msgstr "NetDB" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:108 -msgid "Health Report" -msgstr "路由器健康状况报告" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:110 -msgid "Logs" -msgstr "日志" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:114 -msgid "Show the router's workload, and how it's performing" -msgstr "显示I2P路由器的负载与工作状况" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:116 -msgid "Jobs" -msgstr "作业" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:120 -msgid "Graph router performance" -msgstr "路由性能统计图" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:122 -msgid "Graphs" -msgstr "图表" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:126 -msgid "Textual router performance statistics" -msgstr "路由性能文字统计" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:138 -msgid "I2P Router Help" -msgstr "I2P路由帮助" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:140 -msgid "General" -msgstr "功能概况" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:143 -msgid "Your unique I2P router identity is" -msgstr "您I2P路由的唯一身份为" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:147 -msgid "never reveal it to anyone" -msgstr "切勿将其告诉任何人" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:149 -msgid "Local Identity" -msgstr "本地身份" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:161 -msgid "How long we've been running for this session" -msgstr "本次路由运行时间" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:164 -msgid "Uptime" -msgstr "运行时间" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:171 -msgid "" -"Help with configuring your firewall and router for optimal I2P performance" -msgstr "如何正确配置防火墙和(物理)路由器优化I2P性能" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:198 -msgid "Download" -msgstr "下载" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:207 -msgid "Download Unsigned" -msgstr "下载未签名更新" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:233 -msgid "Active" -msgstr "活动节点" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:241 -msgid "Fast" -msgstr "快速节点" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:247 -msgid "High capacity" -msgstr "高容量节点" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:259 -msgid "Known" -msgstr "已知节点" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:274 -msgid "Help with firewall configuration" -msgstr "如何配置防火墙" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:276 -msgid "Check NAT/firewall" -msgstr "检查NAT/防火墙" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:296 -msgid "Reseed" -msgstr "补种(搜索节点启动网络)" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:313 -msgid "Configure router bandwidth allocation" -msgstr "设置路由的带宽分配" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:315 -msgid "Bandwidth in/out" -msgstr "带宽(上/下行)" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:332 -msgid "Total" -msgstr "总计" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:340 -msgid "Used" -msgstr "已使用" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:350 -msgid "Tunnels in/out" -msgstr "通道(上/下行)" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:355 -msgid "Exploratory" -msgstr "探测" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:371 -msgid "Participating" -msgstr "共享" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:377 -msgid "What's in the router's job queue?" -msgstr "查看路由的作业队列" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:379 -msgid "Congestion" -msgstr "拥堵" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:384 -msgid "Job lag" -msgstr "作业延迟" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:390 -msgid "Message delay" -msgstr "消息延迟" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:396 -msgid "Tunnel lag" -msgstr "隧道延迟" - -#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:402 -msgid "Backlog" -msgstr "积压" - -#: ../java/src/net/i2p/router/web/SummaryHelper.java:96 -msgid "ERR-Client Manager I2CP Error - check logs" -msgstr "错误-客户程序管理器I2CP错误 - 请看日志" - -#: ../java/src/net/i2p/router/web/SummaryHelper.java:103 -#, java-format -msgid "ERR-Clock Skew of {0}" -msgstr "错误-系统时滞 {0}" - -# 暂不翻译,确定/良好 可能影响按钮的翻译 -#: ../java/src/net/i2p/router/web/SummaryHelper.java:112 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:565 -msgid "OK" -msgstr "正常" - -#: ../java/src/net/i2p/router/web/SummaryHelper.java:113 -msgid "ERR-Private TCP Address" -msgstr "错误-TCP私有地址" - -#: ../java/src/net/i2p/router/web/SummaryHelper.java:115 -msgid "ERR-SymmetricNAT" -msgstr "错误-SymmeticNAT" - -#: ../java/src/net/i2p/router/web/SummaryHelper.java:118 -msgid "WARN-Firewalled with Inbound TCP Enabled" -msgstr "警告-入站TCP开启但因防火墙受限" - -#: ../java/src/net/i2p/router/web/SummaryHelper.java:120 -msgid "WARN-Firewalled and Floodfill" -msgstr "警告-种子节点因防火墙受限" - -#: ../java/src/net/i2p/router/web/SummaryHelper.java:122 -msgid "WARN-Firewalled and Fast" -msgstr "警告-快速节点因防火墙受限" - -#: ../java/src/net/i2p/router/web/SummaryHelper.java:123 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:569 -msgid "Firewalled" -msgstr "防火墙限制" - -#: ../java/src/net/i2p/router/web/SummaryHelper.java:125 -msgid "" -"ERR-UDP Port In Use - Set i2np.udp.internalPort=xxxx in advanced config and " -"restart" -msgstr "" -"错误-UDP端口已占用 - 在高级设置中设置 i2np.udp.internalPort=新端口并重启程序" - -#: ../java/src/net/i2p/router/web/SummaryHelper.java:131 -msgid "ERR-No Active Peers, Check Network Connection and Firewall" -msgstr "错误-无活动节点,请检查网络连接及防火墙" - -#: ../java/src/net/i2p/router/web/SummaryHelper.java:134 -msgid "ERR-UDP Disabled and Inbound TCP host/port not set" -msgstr "错误-UDP已禁用且TCP入站主机与端口未设置" - -#: ../java/src/net/i2p/router/web/SummaryHelper.java:136 -msgid "WARN-Firewalled with UDP Disabled" -msgstr "警告-因防火墙受限且UDP被禁用" - -#: ../java/src/net/i2p/router/web/SummaryHelper.java:138 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:585 -msgid "Testing" -msgstr "测试中" - -#: ../java/src/net/i2p/router/web/SummaryHelper.java:371 -msgid "Add/remove/edit & control your client and server tunnels" -msgstr "添加、删除、编辑或控制客户程序隧道和服务隧道" - -#: ../java/src/net/i2p/router/web/SummaryHelper.java:371 -msgid "Local Destinations" -msgstr "本地目标" - -#: ../java/src/net/i2p/router/web/SummaryHelper.java:380 -msgid "Server" -msgstr "服务" - -#: ../java/src/net/i2p/router/web/SummaryHelper.java:384 -msgid "Show tunnels" -msgstr "显示隧道" - -#: ../java/src/net/i2p/router/web/SummaryHelper.java:395 -msgid "Leases expired" -msgstr "Lease已过期" - -#: ../java/src/net/i2p/router/web/SummaryHelper.java:395 -#: ../java/src/net/i2p/router/web/SummaryHelper.java:396 -msgid "Rebuilding" -msgstr "正在重建" - -#: ../java/src/net/i2p/router/web/SummaryHelper.java:396 -msgid "ago" -msgstr "前" - -#: ../java/src/net/i2p/router/web/SummaryHelper.java:399 -msgid "Ready" -msgstr "就绪" - -#: ../java/src/net/i2p/router/web/SummaryHelper.java:403 -msgid "Building" -msgstr "创建中" - -#: ../java/src/net/i2p/router/web/SummaryHelper.java:403 -msgid "Building tunnels" -msgstr "正在隧道创建" - -#: ../java/src/net/i2p/router/web/SummaryHelper.java:415 -#: ../java/strings/Strings.java:36 -msgid "shared clients" -msgstr "共享客户端" - -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:41 -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:63 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:273 -msgid "configure" -msgstr "设置" - -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:65 -msgid "dead" -msgstr "失效" - -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:71 -msgid "Participating tunnels" -msgstr "共享隧道" - -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:72 -msgid "From" -msgstr "从" - -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:72 -msgid "Receive on" -msgstr "接收" - -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:73 -msgid "Expiration" -msgstr "到期" - -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:73 -msgid "Send on" -msgstr "发送" - -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:73 -msgid "To" -msgstr "至" - -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:74 -msgid "Rate" -msgstr "速度" - -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:74 -msgid "Role" -msgstr "职能" - -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:74 -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:156 -msgid "Usage" -msgstr "使用情况" - -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:107 -msgid "grace period" -msgstr "过渡期" - -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:117 -msgid "Outbound Endpoint" -msgstr "出站终端" - -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:119 -msgid "Inbound Gateway" -msgstr "入站网关" - -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:121 -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:162 -msgid "Participant" -msgstr "参与节点" - -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:126 -msgid "Inactive participating tunnels" -msgstr "不活跃的共享隧道" - -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:127 -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:216 -msgid "Lifetime bandwidth usage" -msgstr "运行期间带宽使用情况" - -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:156 -msgid "Expiry" -msgstr "到期" - -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:156 -msgid "In/Out" -msgstr "入/出" - -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:159 -msgid "Participants" -msgstr "参与节点" - -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:165 -msgid "Endpoint" -msgstr "终端" - -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:205 -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:211 -msgid "Build in progress" -msgstr "创建中" - -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:205 -msgid "inbound" -msgstr "入站" - -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:211 -msgid "outbound" -msgstr "出站" - -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:215 -msgid "No tunnels; waiting for the grace period to end." -msgstr "无隧道;等待宽限期结束。" - -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:216 -msgid "in" -msgstr "入" - -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:217 -msgid "out" -msgstr "出" - -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:234 -msgid "Tunnel Counts By Peer" -msgstr "每节点隧道计数" - -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:235 -msgid "% of total" -msgstr "占总数%" - -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:235 -msgid "Our Tunnels" -msgstr "我方隧道" - -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:235 -msgid "Participating Tunnels" -msgstr "共享隧道" - -#: ../java/src/net/i2p/router/web/TunnelRenderer.java:253 -msgid "Totals" -msgstr "总计" - -#: ../java/strings/Strings.java:12 -msgid "addressbook" -msgstr "地址簿" - -#: ../java/strings/Strings.java:13 -msgid "i2psnark" -msgstr "匿名BT客户端" - -#: ../java/strings/Strings.java:14 -msgid "i2ptunnel" -msgstr "I2P隧道" - -#: ../java/strings/Strings.java:15 -msgid "susimail" -msgstr "匿名邮箱" - -#: ../java/strings/Strings.java:16 -msgid "susidns" -msgstr "susiDNS" - -#: ../java/strings/Strings.java:17 -msgid "routerconsole" -msgstr "路由控制台" - -#: ../java/strings/Strings.java:22 -msgid "Web console" -msgstr "网页控制台" - -#: ../java/strings/Strings.java:23 -msgid "SAM application bridge" -msgstr "SAM 协议桥" - -#: ../java/strings/Strings.java:24 -msgid "Application tunnels" -msgstr "程序隧道" - -#: ../java/strings/Strings.java:25 -msgid "My eepsite web server" -msgstr "匿名主页服务器" - -#: ../java/strings/Strings.java:26 -msgid "I2P webserver (eepsite)" -msgstr "匿名主页服务器(eepsite)" - -#: ../java/strings/Strings.java:27 -msgid "Browser launch at startup" -msgstr "路由器启动时运行浏览器" - -#: ../java/strings/Strings.java:28 -msgid "BOB application bridge" -msgstr "BOB 协议桥" - -#: ../java/strings/Strings.java:30 -msgid "Open Router Console in web browser at startup" -msgstr "路由启动时打开控制台" - -#: ../java/strings/Strings.java:37 -msgid "IRC proxy" -msgstr "I2P聊天室" - -#: ../java/strings/Strings.java:38 -msgid "eepsite" -msgstr "匿名网站" - -#: ../java/strings/Strings.java:39 -msgid "I2P webserver" -msgstr "匿名主页服务器" - -#: ../java/strings/Strings.java:40 -msgid "HTTP Proxy" -msgstr "HTTP 代理" - -#: ../java/strings/Strings.java:42 -msgid "eepProxy" -msgstr "I2P代理" - -#: ../java/strings/Strings.java:43 -msgid "ircProxy" -msgstr "I2P聊天室" - -#: ../java/strings/Strings.java:45 -msgid "I2PSnark" -msgstr "I2P Snark" - -#: ../java/strings/Strings.java:47 -msgid "iMule" -msgstr "" - -#: ../java/strings/Strings.java:51 -msgid "classic" -msgstr "经典" - -#: ../java/strings/Strings.java:52 -msgid "dark" -msgstr "暗色调" - -#: ../java/strings/Strings.java:53 -msgid "light" -msgstr "亮色调" - -#: ../java/strings/Strings.java:54 -msgid "midnight" -msgstr "午夜" - -#: ../java/strings/Strings.java:57 -msgid "Bandwidth" -msgstr "带宽" - -#: ../java/strings/Strings.java:58 -msgid "BandwidthLimiter" -msgstr "带宽限制" - -#: ../java/strings/Strings.java:59 -msgid "ClientMessages" -msgstr "客户消息" - -#: ../java/strings/Strings.java:60 -msgid "Encryption" -msgstr "加密" - -#: ../java/strings/Strings.java:61 -msgid "i2cp" -msgstr "" - -#: ../java/strings/Strings.java:62 -msgid "I2PTunnel" -msgstr "I2P隧道" - -#: ../java/strings/Strings.java:63 -msgid "InNetPool" -msgstr "" - -#: ../java/strings/Strings.java:64 -msgid "JobQueue" -msgstr "作业队列" - -#: ../java/strings/Strings.java:65 -msgid "NetworkDatabase" -msgstr "网络数据库" - -#: ../java/strings/Strings.java:66 -msgid "ntcp" -msgstr "NTCP" - -#: ../java/strings/Strings.java:69 -msgid "Stream" -msgstr "流" - -#: ../java/strings/Strings.java:70 -msgid "Throttle" -msgstr "门槛" - -#: ../java/strings/Strings.java:71 -msgid "Transport" -msgstr "传输" - -#: ../java/strings/Strings.java:73 -msgid "udp" -msgstr "UDP" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:106 -msgid "config networking" -msgstr "连网设置" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:217 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:218 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:217 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:217 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:231 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:217 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:217 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:218 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:217 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:217 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:217 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/debug_jsp.java:220 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:228 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/graphs_jsp.java:217 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_jsp.java:220 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/index_jsp.java:223 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/jobs_jsp.java:216 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:216 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/netdb_jsp.java:216 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/nowebapp_jsp.java:220 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/oldconsole_jsp.java:220 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/peers_jsp.java:216 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/profiles_jsp.java:216 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/stats_jsp.java:216 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/summaryframe_jsp.java:235 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/tunnels_jsp.java:216 -msgid "Refresh (s)" -msgstr "刷新(秒)" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:221 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:222 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:221 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:221 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:235 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:221 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:221 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:222 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:221 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:221 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:221 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/debug_jsp.java:224 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:232 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/graphs_jsp.java:221 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_jsp.java:224 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/index_jsp.java:227 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/jobs_jsp.java:220 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:220 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/netdb_jsp.java:220 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/nowebapp_jsp.java:224 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/oldconsole_jsp.java:224 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/peers_jsp.java:220 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/profiles_jsp.java:220 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/stats_jsp.java:220 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/summaryframe_jsp.java:238 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/tunnels_jsp.java:220 -msgid "Enable" -msgstr "启用" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:241 -msgid "I2P Network Configuration" -msgstr "I2P 连网设置" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:297 -msgid "Bandwidth limiter" -msgstr "带宽限制" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:299 -msgid "" -"I2P will work best if you configure your rates to match the speed of your " -"internet connection." -msgstr "与联网环境相符的速度能使I2P以最佳的状态工作。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:303 -msgid "KBps In" -msgstr "KBps 入站" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:317 -msgid "KBps Out" -msgstr "KBps 出站" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:333 -msgid "Share" -msgstr "共享" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:340 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:307 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:303 -msgid "NOTE" -msgstr "注意" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:342 -#, java-format -msgid "You have configured I2P to share only {0} KBps." -msgstr "您设置I2P仅共享 {0} KBps" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:345 -msgid "I2P requires at least 12KBps to enable sharing. " -msgstr "I2P 需要至少 12KBps 才能进行共享。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:346 -msgid "" -"Please enable sharing (participating in tunnels) by configuring more " -"bandwidth. " -msgstr "请设置更多的带宽以便启用共享功能(加入到其他节点的隧道创建中)。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:347 -msgid "" -"It improves your anonymity by creating cover traffic, and helps the network." -msgstr "通过制造混淆流量共享能增强您的匿名性,帮助网络成长。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:350 -#, java-format -msgid "You have configured I2P to share {0} KBps." -msgstr "您设置I2P共享 {0} KBps" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:353 -msgid "" -"The higher the share bandwidth the more you improve your anonymity and help " -"the network." -msgstr "共享的带宽越多,您的匿名性越强同时能帮助网络成长。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:359 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:504 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:305 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:324 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:335 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:375 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:343 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:323 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:356 -msgid "Cancel" -msgstr "取消" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:363 -msgid "IP and Transport Configuration" -msgstr "IP 与传输设置" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:365 -msgid "The default settings will work for most people." -msgstr "默认设置适于大多数人。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:367 -msgid "There is help below." -msgstr "页面下方有帮助信息" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:369 -msgid "UPnP Configuration" -msgstr "UPnP 设置" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:373 -msgid "Enable UPnP to open firewall ports" -msgstr "启用UPnP以打开防火墙端口" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:375 -msgid "UPnP status" -msgstr "UPnP 统计" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:377 -msgid "IP Configuration" -msgstr "IP 设置" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:379 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:449 -msgid "Externally reachable hostname or IP address" -msgstr "公网可访问的本机域名或IP" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:383 -msgid "Use all auto-detect methods" -msgstr "使用全部自动探测方法" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:387 -msgid "Disable UPnP IP address detection" -msgstr "禁用UPnP IP 地址探测" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:391 -msgid "Ignore local interface IP address" -msgstr "忽略本地接口的 IP 地址" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:395 -msgid "Use SSU IP address detection only" -msgstr "仅使用SSU IP 地址探测" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:399 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:467 -msgid "Specify hostname or IP" -msgstr "指定主机名或IP" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:405 -msgid "Select Interface" -msgstr "选择网络接口" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:419 -msgid "Hidden mode - do not publish IP" -msgstr "隐身模式 - 不发布IP" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:421 -msgid "(prevents participating traffic)" -msgstr "(阻止共享流量)" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:423 -msgid "Action when IP changes" -msgstr "" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:427 -msgid "" -"Laptop mode - Change router identity and UDP port when IP changes for " -"enhanced anonymity" -msgstr "" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:429 -msgid "Experimental" -msgstr "" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:431 -msgid "UDP Configuration:" -msgstr "UPnP 设置:" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:433 -msgid "UDP port:" -msgstr "UDP端口" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:447 -msgid "TCP Configuration" -msgstr "TCP 连接设置" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:453 -msgid "Use auto-detected IP address" -msgstr "使用自动检测得到的 IP 地址" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:455 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:487 -msgid "currently" -msgstr "目前" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:459 -msgid "if we are not firewalled" -msgstr "如果没有受到防火墙阻挡" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:463 -msgid "Always use auto-detected IP address (Not firewalled)" -msgstr "总是使用自动探测到的IP地址(没有防火墙限制)" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:473 -msgid "Disable inbound (Firewalled)" -msgstr "禁止入站连接(受防火墙限制)" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:477 -msgid "Completely disable" -msgstr "完全禁用" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:479 -msgid "" -"(select only if behind a firewall that throttles or blocks outbound TCP)" -msgstr "仅在受到防火墙的流量限制或入站连接限制时使用" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:481 -msgid "Externally reachable TCP port" -msgstr "公网可访问的TCP端口" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:485 -msgid "Use the same port configured for UDP" -msgstr "使用与UDP相同的端口" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:493 -msgid "Specify Port" -msgstr "指定端口" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:497 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:342 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:329 -msgid "Note" -msgstr "注意" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:500 -msgid "Changing these settings will restart your router." -msgstr "修改这些设置将必须重启路由器。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:506 -msgid "Configuration Help" -msgstr "设置帮助" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:508 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:557 -msgid "" -"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." -msgstr "" -"I2P可以与大多数防火墙共存,如果I2P端口(第一次安装时随机选择)进行了UDP/TCP映" -"射,您的速度和网络整合度会逐渐提升。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:510 -msgid "" -"If you can, please poke a hole in your firewall to allow unsolicited UDP and " -"TCP packets to reach you." -msgstr "如果可能,请在防火墙中添加端口并允许入站UDP/TCP数据包通过。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:512 -msgid "" -"If you can't, I2P supports UPnP (Universal Plug and Play) and UDP hole " -"punching with \"SSU introductions\" to relay traffic." -msgstr "" -"如果不能,I2P支持UPnP(Universal Plug and Play)或借助“SSU中介”进行UDP端口穿" -"透,通过它们也可以中继数据。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:514 -msgid "" -"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." -msgstr "" -"上述大部分设置仅为特殊情况准备,例如UPnP不能正常工作,或外部防火墙封锁网络。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:516 -msgid "Certain firewalls such as symmetric NATs may not work well with I2P." -msgstr "在某些防火墙下例如Symmetric,I2P可能无法有效利用NAT工作。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:525 -msgid "" -"UPnP is used to communicate with Internet Gateway Devices (IGDs) to detect " -"the external IP address and forward ports." -msgstr "UPnP与公网网关设备(IGD)通讯可以检测外部IP和映射端口。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:527 -msgid "UPnP support is beta, and may not work for any number of reasons" -msgstr "UPnP支持仍在测试阶段,可能由于一些原因无法正常工作。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:529 -msgid "No UPnP-compatible device present" -msgstr "没有发现UPnP兼容设备" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:531 -msgid "UPnP disabled on the device" -msgstr "设备上的UPnP支持已禁用" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:533 -msgid "Software firewall interference with UPnP" -msgstr "软件防火墙阻止UPnP" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:535 -msgid "Bugs in the device's UPnP implementation" -msgstr "设备的UPnP支持有Bug" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:537 -msgid "Multiple firewall/routers in the internet connection path" -msgstr "公网连接中存在多个防火墙/路由器" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:539 -msgid "UPnP device change, reset, or address change" -msgstr "UPnP设备改变、重置或地址迁移" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:541 -msgid "Review the UPnP status here." -msgstr "在这里检查UPnP状态。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:543 -msgid "" -"UPnP may be enabled or disabled above, but a change requires a router " -"restart to take effect." -msgstr "UPnP 的关闭或开启均需要程序重启后生效。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:545 -msgid "Hostnames entered above will be published in the network database." -msgstr "上面输入的主机名称将在网络数据库(NetDB)中发布。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:547 -msgid "They are not private." -msgstr "他们并非私有地址。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:549 -msgid "" -"Also, do not enter a private IP address like 127.0.0.1 or 192.168.1.1." -msgstr "此外,请勿输入如127.0.0.1或192.168.1.1等私有地址" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:551 -msgid "" -"If you specify the wrong IP address or hostname, or do not properly " -"configure your NAT or firewall, your network performance will degrade " -"substantially." -msgstr "" -"如果您设置了错误的IP地址或主机名称,或NAT/防火墙配置不当,您的网络性能将受到" -"明显影响。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:553 -msgid "When in doubt, leave the settings at the defaults." -msgstr "如果对设置有疑问,请保留默认设置。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:555 -msgid "Reachability Help" -msgstr "连通性帮助" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:560 -msgid "" -"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." -msgstr "" -"如果您认为已经打开了防火墙,但I2P仍然报告您受到防火墙阻隔,请想想您是否可能有" -"多层防火墙,例如软件防护墙和外部的硬件路由器。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:563 -msgid "" -"If there is an error, the logs may also help " -"diagnose the problem." -msgstr "如果存在错误,日志可以帮助您诊断问题。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:567 -msgid "Your UDP port does not appear to be firewalled." -msgstr "您的UDP端口似乎一切正常。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:571 -msgid "Your UDP port appears to be firewalled." -msgstr "您的UDP端口似乎因防火墙而连接受限。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:573 -msgid "" -"As the firewall detection methods are not 100% reliable, this may " -"occasionally be displayed in error." -msgstr "由于防火墙检测方法并非100%可靠,有时也可能错误地显示此此提示。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:575 -msgid "" -"However, if it appears consistently, you should check whether both your " -"external and internal firewalls are open for your port." -msgstr "然而,如果总是出现此提示,您应检查外部或内部防火墙是否打开了I2P端口。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:577 -msgid "" -"I2P will work fine when firewalled, there is no reason for concern. When " -"firewalled, the router uses \"introducers\" to relay inbound connections." -msgstr "" -"即使受到防火墙阻拦,I2P也能够正常工作,无需担心。受到防火墙阻隔时,路由器将通" -"过“中介(Introducers)”中继入站连接。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:579 -msgid "" -"However, you will get more participating traffic and help the network more " -"if you can open your firewall(s)." -msgstr "" -"然而,如果您能打开防火墙端口,您才能得到的共享流量,更好的帮助I2P网络。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:581 -msgid "" -"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." -msgstr "" -"如果您确信已经打开了防火墙,请想想是不是同时存在硬件和软件防火墙,或存在您无" -"法控制的额外的机构性的防火墙。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:583 -msgid "" -"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." -msgstr "" -"当然,某些路由器可能无法正确映射同时使用TCP和UDP协议的端口,或存在其他限制或" -"缺陷,障碍了数据进入I2P网络。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:587 -msgid "The router is currently testing whether your UDP port is firewalled." -msgstr "路由器正在测试您的UDP端口是否被防火墙阻挡。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:591 -msgid "" -"The router is not configured to publish its address, therefore it does not " -"expect incoming connections." -msgstr "路由器被设置为禁止发布IP地址,因此并不需要入站连接。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:593 -msgid "WARN - Firewalled and Fast" -msgstr "警告 - 快速节点,因防火墙受限" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:595 -msgid "" -"You have configured I2P to share more than 128KBps of bandwidth, but you are " -"firewalled." -msgstr "您设置I2P共享超过128KBps的带宽,但您的连接因防火墙受阻。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:597 -msgid "" -"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." -msgstr "" -"尽管在此种配置情况下I2P可以正常工作,但如果您的确能够分享超过128kps的带宽,打" -"开防火墙端口它能工作的更好帮助网络中其他的人。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:599 -msgid "WARN - Firewalled and Floodfill" -msgstr "警告 - 种子节点,因防火墙受限" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:601 -msgid "" -"You have configured I2P to be a floodfill router, but you are firewalled." -msgstr "您已将I2P设置为种子路由,但您的连接已因防火墙受阻。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:603 -msgid "" -"For best participation as a floodfill router, you should open your firewall." -msgstr "为了种子路由能够更好的参与到I2P网络中,请您的防火墙中打开端口。" - -# 暂不翻译方便反馈 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:605 -msgid "WARN - Firewalled with Inbound TCP Enabled" -msgstr "警告 - 入站TCP开启,但因防火墙受限" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:607 -msgid "" -"You have configured inbound TCP, however your UDP port is firewalled, and " -"therefore it is likely that your TCP port is firewalled as well." -msgstr "" -"您设置了使用入站TCP连接,同时您的UDP端口因防火墙受阻,由此看来您的TCP端口也被" -"防火墙阻挡。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:609 -msgid "" -"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." -msgstr "" -"如果您在TCP端口因防火墙受阻的情况下启用入站TCP连接,其他路由器节点将无法与您" -"建立连接,造成网络受阻。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:611 -msgid "Please open your firewall or disable inbound TCP above." -msgstr "请打开您的防火墙端口或禁用上面的入站TCP连接。" - -# 暂不翻译 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:613 -msgid "WARN - Firewalled with UDP Disabled" -msgstr "警告 - 因防火墙受限,且UDP被禁用" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:615 -msgid "You have configured inbound TCP, however you have disabled UDP." -msgstr "您设置了使用TCP连接,然而禁用了UDP连接。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:617 -msgid "" -"You appear to be firewalled on TCP, therefore your router cannot accept " -"inbound connections." -msgstr "您的TCP连接似乎因防火墙受阻,导致您的路由器无法接收入站连接。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:619 -msgid "Please open your firewall or enable UDP." -msgstr "请打开防火墙端口或启用UDP。" - -# 暂不翻译,方便错误反馈 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:621 -msgid "ERR - Clock Skew" -msgstr "错误 - 系统时滞" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:623 -msgid "" -"Your system's clock is skewed, which will make it difficult to participate " -"in the network." -msgstr "如果您的系统时钟太快或太慢,将影响计算机接入网络。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:625 -msgid "Correct your clock setting if this error persists." -msgstr "如果错误持续,请校对您的系统时间。" - -# 暂不翻译,方便错误反馈 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:627 -msgid "ERR - Private TCP Address" -msgstr "错误 - 私有TCP地址" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:629 -msgid "" -"You must never advertise an unroutable IP address such as 127.0.0.1 or " -"192.168.1.1 as your external address." -msgstr "" -"您不能发布一个公网无法访问的 IP 地址,例如127.0.0.1或192.168.1.1一类的内网地" -"址。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:631 -msgid "Correct the address or disable inbound TCP above." -msgstr "正确设置IP地址或禁用上面的入站TCP连接。" - -# 暂不翻译,方便错误反馈 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:633 -msgid "ERR - SymmetricNAT" -msgstr "错误 - SymmetricNAT" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:635 -msgid "I2P detected that you are firewalled by a Symmetric NAT." -msgstr "I2P检测到您受到Symmetic NAT的阻挡。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:637 -msgid "" -"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." -msgstr "" -"I2P无法与此类防火墙很好的并存。您可能无法接收入站连接,这会障碍您连入I2P网" -"络。" - -# 暂不翻译,方便问题反馈 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:639 -msgid "" -"ERR - UDP Port In Use - Set i2np.udp.internalPort=xxxx in advanced config " -"and restart" -msgstr "" -"错误 - UDP端口已占用 - 在高级设置中设置 i2np.udp.internalPort=新端口 并重启程" -"序" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:641 -msgid "I2P was unable to bind to port 8887 or other configured port." -msgstr "I2P无法绑定到端口8887或其他指定的端口上。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:643 -msgid "" -"Check to see if another program is using the configured port. If so, stop " -"that program or configure I2P to use a different port." -msgstr "" -"检查是否有其他程序正在使用了I2P的端口,如果是,关闭此程序或设置I2P使用不同的" -"端口。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:645 -msgid "" -"This may be a transient error, if the other program is no longer using the " -"port." -msgstr "如果其他程序不再使用此端口,这可能是临时性的错误。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:647 -msgid "However, a restart is always required after this error." -msgstr "然而,发生此错误后一般需要重启程序才能解决。" - -# 暂不翻译,方便错误反馈 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:649 -msgid "ERR - UDP Disabled and Inbound TCP host/port not set" -msgstr "错误 - UDP已禁用,且TCP入站主机与端口未设置" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:651 -msgid "" -"You have not configured inbound TCP with a hostname and port above, however " -"you have disabled UDP." -msgstr "您没有设置入站TCP的主机名称和端口,同时又关闭了UDP。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:653 -msgid "Therefore your router cannot accept inbound connections." -msgstr "因此您的路由器无法接收入站连接。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:655 -msgid "Please configure a TCP host and port above or enable UDP." -msgstr "请在前面设置TCP主机和端口或启用UDP" - -# 错误提示暂不翻译,以便错误反馈。 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:657 -msgid "ERR - Client Manager I2CP Error - check logs" -msgstr "错误 - 客户程序管理器 I2CP 错误 - 请看日志" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:659 -msgid "This is usually due to a port 7654 conflict. Check the logs to verify." -msgstr "这通常为7654端口冲突所致,请查看日志确认原因。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:661 -msgid "" -"Do you have another I2P instance running? Stop the conflicting program and " -"restart I2P." -msgstr "您是否已经运行了另一个I2P实例?请关掉冲突的程序并重启I2P。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:107 -msgid "config advanced" -msgstr "高级设置" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:242 -msgid "I2P Advanced Configuration" -msgstr "I2P 高级设置" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:299 -msgid "Advanced I2P Configuration" -msgstr "I2P 高级设置" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:303 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:321 -msgid "Apply" -msgstr "应用" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:309 -msgid "Some changes may require a restart to take effect." -msgstr "某些设置需要程序重启后生效。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:106 -msgid "config clients" -msgstr "升级设置" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:241 -msgid "I2P Client Configuration" -msgstr "I2P 客户程序设置" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:306 -msgid "Client Configuration" -msgstr "客户程序设置" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:308 -msgid "" -"The Java clients listed below are started by the router and run in the same " -"JVM." -msgstr "下面列出的Java客户端随路由器启动并运行于同一JVM中。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:312 -msgid "To change other client options, edit the file" -msgstr "修改其他客户端设置请编辑文件" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:319 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:331 -msgid "All changes require restart to take effect." -msgstr "所有更改均需要程序重启才能生效。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:323 -msgid "WebApp Configuration" -msgstr "WebApp 设置" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:325 -msgid "" -"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)." -msgstr "" -"下面列出的Java Web 程序随客户端“web控制台”一同启动,并与路由运行于同一JVM中。" -"这些Web程序通常可以通过路由器界面直接访问。他们可能是完整的程序 (例如 " -"i2psnark/BT客户端),其他客户端程序的前端或必须单独启动的程序(例如. susidns, " -"i2ptunnel),甚至根本没有Web界面(例如 addressbook)。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:327 -msgid "" -"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." -msgstr "" -"从webapps目录中删除相应的.war文件同样可以禁用Web程序;然而这些 .war 文件和Web" -"程序在更新I2P后还会再次出现,所以推荐在这里通过设置的方法禁用不用的Web程序。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:106 -msgid "config keyring" -msgstr "钥匙环设置" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:228 -msgid "I2P Keyring Configuration" -msgstr "I2P 钥匙环设置" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:294 -msgid "The router keyring is used to decrypt encrypted leaseSets." -msgstr "路由的钥匙环被用来解密和加密赁集." - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:297 -msgid "" -"The keyring may contain keys for local or remote encrypted destinations." -msgstr "钥匙环可以包含本地和远程的加密目标(Destination)." - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:307 -msgid "Manual Keyring Addition" -msgstr "手动添加钥匙环" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:309 -msgid "Enter keys for encrypted remote destinations here." -msgstr "在此处添加远程加密目标的密钥。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:312 -msgid "Keys for local destinations must be entered on the" -msgstr "输入本地目标的密钥请到" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:314 -msgid "I2PTunnel page" -msgstr "I2P 隧道页面" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:316 -msgid "Dest. name, hash, or full key" -msgstr "目标(Dest.)名称, HASH, 或完整公钥" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:318 -msgid "Encryption Key" -msgstr "加密密钥" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:107 -msgid "config logging" -msgstr "日志设置" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:242 -msgid "I2P Logging Configuration" -msgstr "I2P 记录设置" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:299 -msgid "Configure I2P Logging Options" -msgstr "设置 I2P 记录选项" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:301 -msgid "Logging filename" -msgstr "日志文件名称" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:305 -msgid "(the symbol '@' will be replaced during log rotation)" -msgstr "(日志轮转时符号'@'将被替换)" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:307 -msgid "Log record format" -msgstr "日志记录格式" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:311 -msgid "" -"(use 'd' = date, 'c' = class, 't' = thread, 'p' = priority, 'm' = message)" -msgstr "( 'd' = 日期, 'c' = 类, 't' = 线程, 'p' = 优先级, 'm' = 消息)" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:313 -msgid "Log date format" -msgstr "日志日期格式" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:317 -msgid "" -"('MM' = month, 'dd' = day, 'HH' = hour, 'mm' = minute, 'ss' = second, 'SSS' " -"= millisecond)" -msgstr "" -"('MM' = 月, 'dd' = 天, 'HH' = 小时, 'mm' = 分钟, 'ss' = 秒, 'SSS' = 毫秒)" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:319 -msgid "Max log file size" -msgstr "日志最大体积" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:323 -msgid "Default log level" -msgstr "默认日志等级" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:327 -msgid "" -"(DEBUG and INFO are not recommended defaults, as they will drastically slow " -"down your router)" -msgstr "(建议不要使用 DEBUG 或 INFO 作为默认等级,他们会明显降低程序性能)" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:329 -msgid "Log level overrides" -msgstr "等级外
      日志项目" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:106 -msgid "config peers" -msgstr "节点设置" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:228 -msgid "I2P Peer Configuration" -msgstr "I2P 节点设置" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:304 -msgid "Manual Peer Controls" -msgstr "手动节点控制" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:306 -msgid "Router Hash" -msgstr "路由器Key(见NetDB)" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:310 -msgid "Manually Ban / Unban a Peer" -msgstr "手动封杀/解封某个节点" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:312 -msgid "" -"Banning will prevent the participation of this peer in tunnels you create." -msgstr "封锁将阻止节点参与您的隧道创建" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:324 -msgid "" -"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" -msgstr "" -"评分(Bonuse)可能为正或为负并影响节点是否评为快速和高容量节点。快速节点用于客" -"户程序通道,高容量节点用于探索隧道。当前评分显示于" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:326 -msgid "profiles page" -msgstr "节点信息页面" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:342 -msgid "Adjust peer bonuses" -msgstr "调整节点评分" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:344 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/profiles_jsp.java:253 -msgid "Banned Peers" -msgstr "已封锁节点" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:366 -msgid "Banned IPs" -msgstr "已封锁IP" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:106 -msgid "config service" -msgstr "服务设置" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:228 -msgid "I2P Service Configuration" -msgstr "I2P 服务设置" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:284 -msgid "Shutdown the router" -msgstr "关闭路由器" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:286 -msgid "" -"Graceful shutdown lets the router satisfy the agreements it has already made " -"before shutting down, but may take a few minutes." -msgstr "" -"平滑关闭让路由器在关闭前完成已达成的任务,但这可能需要花费几分钟的时间。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:288 -msgid "" -"If you need to kill the router immediately, that option is available as well." -msgstr "当然你也可以选择立即关闭路由。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:298 -msgid "" -"If you want the router to restart itself after shutting down, you can choose " -"one of the following." -msgstr "如果你想要路由器关闭后自动重新启动,可以选择下面的选项。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:300 -msgid "This is useful in some situations" -msgstr "重启在某些情况下有用" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:302 -msgid "" -"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." -msgstr "" -"例如当修改了客户程序仅在启动时读取的设置,比如路由器控制界面的密码,监听的接" -"口。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:304 -msgid "" -"A graceful restart will take a few minutes (but your peers will appreciate " -"your patience), while a hard restart does so immediately." -msgstr "" -"平滑重启可能会等待几分钟的时间(但你的节点一定会感激你的耐心),硬重启可以立即" -"完成。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:306 -msgid "" -"After tearing down the router, it will wait 1 minute before starting back up " -"again." -msgstr "路由关闭后将等待1分钟再重新启动。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:316 -msgid "Systray integration" -msgstr "使用系统托盘" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:318 -msgid "" -"On the windows platform, there is a small application to sit in the system " -"tray, allowing you to view the router's status" -msgstr "Windows 平台允许小程序进驻系统托盘,让你可以查看路由状态" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:320 -msgid "" -"(later on, I2P client applications will be able to integrate their own " -"functionality into the system tray as well)." -msgstr "(以后的 I2P 客户端程序也会将它们的功能集成到系统托盘里)。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:322 -msgid "If you are on windows, you can either enable or disable that icon here." -msgstr "如果你使用Windows, 可以在这里开启或关闭这个托盘图标。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:328 -msgid "Run on startup" -msgstr "启动时运行" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:330 -msgid "" -"You can control whether I2P is run on startup or not by selecting one of the " -"following options" -msgstr "这里你可以通过下面的选项来设置开机后 I2P 是否启动" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:332 -msgid "I2P will install (or remove) a service accordingly." -msgstr "I2P将相应的将自身安装为服务(或卸载服务)。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:334 -msgid "If you prefer the command line, you can also run the " -msgstr "如果你偏好使用命令行,可以运行" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:344 -msgid "" -"If you are running I2P as service right now, removing it will shut down your " -"router immediately." -msgstr "如果您目前已经以服务形式运行 I2P ,删除 I2P 服务将立刻关闭路由器。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:346 -msgid "" -"You may want to consider shutting down gracefully, as above, then running " -"uninstall_i2p_service_winnt.bat." -msgstr "" -"您可以考虑先平滑关闭路由,待退出后运行 uninstall_i2p_service_winnt.bat。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:354 -msgid "Debugging" -msgstr "调试" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:360 -msgid "Launch browser on router startup?" -msgstr "路由器启动时运行浏览器?" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:362 -msgid "" -"I2P's main configuration interface is this web console, so for your " -"convenience I2P can launch a web browser on startup pointing at" -msgstr "" -"此Web控制台是I2P的主要设置界面,所以如果您您觉得有必要I2P可以在路由启动时调用" -"浏览器打开" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:107 -msgid "config stats" -msgstr "统计设置" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:229 -msgid "I2P Stats Configuration" -msgstr "I2P 统计设置" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:300 -msgid "Configure I2P Stat Collection" -msgstr "设置 I2P 统计项" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:302 -msgid "Enable full stats?" -msgstr "启用完整统计?" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:309 -msgid "change requires restart to take effect" -msgstr "设置需要程序重启后才能生效。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:311 -msgid "Stat file" -msgstr "统计文件" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:315 -msgid "Filter" -msgstr "过滤器" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:317 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:326 -msgid "toggle all" -msgstr "全部切换" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:328 -msgid "Log" -msgstr "日志" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:330 -msgid "Graph" -msgstr "图表" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:369 -msgid "Advanced filter" -msgstr "高级过滤器" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:106 -msgid "config tunnels" -msgstr "隧道设置" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:241 -msgid "I2P Tunnel Configuration" -msgstr "I2P 隧道设置" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:305 -msgid "The default settings work for most people." -msgstr "默认设置适于大多数人。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:309 -msgid "There is a fundamental tradeoff between anonymity and performance." -msgstr "匿名性需要以性能为代价。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:312 -msgid "" -"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." -msgstr "" -"长于3个跳点的隧道(例如 2跳点 + 0-2跳点,3跳点 + 0-1跳点, 3跳点 + 0-2跳点),或" -"大量常规+大量备用,可能降低性能和稳定性。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:315 -msgid "High CPU and/or high outbound bandwidth usage may result." -msgstr "导致高CPU占用和/或高上行流量。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:318 -msgid "Change these settings with care, and adjust them if you have problems." -msgstr "小心更改这些设置。如果遇到问题可以在这里调整。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:332 -msgid "" -"Exploratory tunnel setting changes are stored in the router.config file." -msgstr "对探测隧道设置的更改将保存入router.config文件中。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:335 -msgid "Client tunnel changes are temporary and are not saved." -msgstr "对客户程序隧道的修改是临时的,将不予保存。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:337 -msgid "To make permanent client tunnel changes see the" -msgstr "要永久性更改客户通道的设置参见" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:339 -msgid "i2ptunnel page" -msgstr "I2P 隧道页面" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:106 -msgid "config UI" -msgstr "界面设置" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:241 -msgid "I2P UI Configuration" -msgstr "I2P 界面设置" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:291 -msgid "Router Console Theme" -msgstr "路由控制台主题" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:309 -msgid "Theme selection disabled for Internet Explorer, sorry." -msgstr "抱歉,主题功能在InternetExplorer中已禁用。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:311 -msgid "" -"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." -msgstr "" -"如果您没使用IE,您的浏览器可能正在伪装IE的UserAgent;您需要设置浏览器(或过滤" -"式代理)使用不同的UserAgent,才能访问路由控制台的主题功能。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:315 -msgid "Router Console Language" -msgstr "路由控制台语言" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:319 -msgid "" -"Please contribute to the router console translation project! Contact the " -"developers on IRC #i2p to help." -msgstr "" -"欢迎加入路由控制台翻译项目!提供帮助请通过IRC到#i2p房间与开发人员联系。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:106 -msgid "config update" -msgstr "升级设置" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:228 -msgid "I2P Update Configuration" -msgstr "I2P 更新设置" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:300 -msgid "Check for I2P and news updates" -msgstr "检查I2P软件及新闻更新" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:302 -msgid "News & I2P Updates" -msgstr "软件及新闻更新" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:306 -msgid "Update In Progress" -msgstr "更新中" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:314 -msgid "News URL" -msgstr "新闻链接" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:318 -msgid "Refresh frequency" -msgstr "更新频率" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:322 -msgid "Update policy" -msgstr "升级策略" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:326 -msgid "Update through the eepProxy?" -msgstr "通过I2P代理更新?" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:330 -msgid "eepProxy host" -msgstr "I2P代理主机" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:334 -msgid "eepProxy port" -msgstr "I2P代理端口" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:338 -msgid "Update URLs" -msgstr "更新链接" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:342 -msgid "Trusted keys" -msgstr "可信公钥" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:346 -msgid "Update with unsigned development builds?" -msgstr "更新包括未签名的开发版?" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:350 -msgid "Unsigned Build URL" -msgstr "未签名软件链接" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:354 -msgid "Save" -msgstr "保存" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:117 -msgid "Page Not Found" -msgstr "页面未找到" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:243 -msgid "" -"Sorry! You appear to be requesting a non-existent Router Console page or " -"resource." -msgstr "抱歉!您请求的页面或资源不存在。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:245 -msgid "Error 404" -msgstr "错误 404" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:250 -msgid "not found" -msgstr "未找到" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/graphs_jsp.java:106 -msgid "graphs" -msgstr "图表" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/graphs_jsp.java:228 -msgid "I2P Performance Graphs" -msgstr "I2P 性能图表" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/index_jsp.java:105 -msgid "home" -msgstr "主页" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/jobs_jsp.java:105 -msgid "job queue" -msgstr "作业队列" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/jobs_jsp.java:227 -msgid "I2P Router Job Queue" -msgstr "I2P 路由器作业队列" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:105 -msgid "logs" -msgstr "日志" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:227 -msgid "I2P Router Logs" -msgstr "I2P 路由器日志" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:229 -msgid "I2P Version & Running Environment" -msgstr "I2P 版本及运行环境" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:231 -msgid "Please include this information in bug reports" -msgstr "报告问题时请包括以下信息" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:267 -msgid "Critical Logs" -msgstr "关键日志" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:271 -msgid "Router Logs" -msgstr "路由器日志" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:277 -msgid "Service (Wrapper) Logs" -msgstr "服务(封装)日志" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/netdb_jsp.java:105 -msgid "network database summary" -msgstr "I2P 网络数据库概况" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/netdb_jsp.java:227 -msgid "I2P Network Database Summary" -msgstr "I2P 网络数据库概况" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/nowebapp_jsp.java:109 -msgid "WebApp Not Found" -msgstr "Web程序(war)未找到" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/nowebapp_jsp.java:231 -msgid "Web Application Not Running" -msgstr "Web程序(.war)未运行" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/nowebapp_jsp.java:233 -msgid "The requested web application is not running." -msgstr "您所访问的Web程序未启动。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/nowebapp_jsp.java:235 -msgid "" -"Please visit the config clients page to start it." -msgstr "" -"请先在配置客户端页面中启动它。" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/peers_jsp.java:105 -msgid "peer connections" -msgstr "节点连接" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/peers_jsp.java:227 -msgid "I2P Network Peers" -msgstr "I2P 网络节点" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/profiles_jsp.java:105 -msgid "peer profiles" -msgstr "节点信息" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/profiles_jsp.java:227 -msgid "I2P Network Peer Profiles" -msgstr "I2P 网络节点信息" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/stats_jsp.java:105 -msgid "statistics" -msgstr "统计" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/stats_jsp.java:242 -msgid "I2P Router Statistics" -msgstr "I2P 路由器统计数据" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/summaryframe_jsp.java:244 -#, java-format -msgid "Disable {0}s Refresh" -msgstr "停止 {0}秒 刷新" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/tunnels_jsp.java:105 -msgid "tunnel summary" -msgstr "隧道概况" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/tunnels_jsp.java:227 -msgid "I2P Tunnel Summary" -msgstr "I2P 隧道概况" - -#~ msgid "skew" -#~ msgstr "时滞" - -#~ msgid "Expl. + Client" -#~ msgstr "探测+客户" - -#~ msgid "Part. from + to" -#~ msgstr "相邻共享节点" - -#~ msgid "Depth" -#~ msgstr "深度" - -#~ msgid "Addresses" -#~ msgstr "地址" - -#~ msgid "view without" -#~ msgstr "查看不含" - -#~ msgid "view with" -#~ msgstr "查看含" - -#~ msgid "stats" -#~ msgstr "统计" - -#~ msgid "View" -#~ msgstr "查看" - -#~ msgid "Not Failing" -#~ msgstr "标准" - -#~ msgid "" -#~ "If you want the router to restart itself after shutting down, you can " -#~ "choose one of the following. 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. A graceful restart will take a few minutes (but your peers " -#~ "will appreciate your patience), while a hard restart does so " -#~ "immediately. After tearing down the router, it will wait 1 minute before " -#~ "starting back up again." -#~ msgstr "" -#~ "如果你想要路由器关闭后重新启动,可以选择下面的选项。重启在某些情况下有用 " -#~ "- 例如当修改了客户程序仅在启动时读取的设置比如路由器控制界面的密码,监听的" -#~ "接口。平滑重启可能会等待几分钟的时间 (但其他节点一定会感激你的耐心),硬重" -#~ "启可以立即完成。 路由关闭后将等待1分钟再重新启动。" - -#~ msgid "" -#~ "On the windows platform, there is a small application to sit in the " -#~ "system tray, allowing you to view the router's status (later on, I2P " -#~ "client applications will be able to integrate their own functionality " -#~ "into the system tray as well). If you are on windows, you can either " -#~ "enable or disable that icon here." -#~ msgstr "" -#~ "windows 平台允许小程序进驻系统托盘,让你可以查看路由状态,(以后的 I2P 客户" -#~ "端程序也会将它们的功能集成到系统托盘里)。如果你使用Windows, 可以在这里开启" -#~ "或关闭这个托盘图标。" +# I2P +# Copyright (C) 2009 The I2P Project +# This file is distributed under the same license as the routerconsole package. +# To contribute translations, see http://www.i2p2.de/newdevelopers +# foo , 2009. +# +msgid "" +msgstr "" +"Project-Id-Version: I2P routerconsole\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-01-29 07:17+0000\n" +"PO-Revision-Date: \n" +"Last-Translator: walking \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Chinese\n" +"X-Poedit-Country: CHINA\n" + +#: ../../../router/java/src/net/i2p/router/Blocklist.java:117 +#, java-format +msgid "Banned by router hash: {0}" +msgstr "按路由器指纹封杀:{0}" + +#: ../../../router/java/src/net/i2p/router/Blocklist.java:119 +msgid "Banned by router hash" +msgstr "路由指纹封锁" + +#: ../../../router/java/src/net/i2p/router/Blocklist.java:664 +msgid "IP banned" +msgstr "IP封锁" + +#: ../../../router/java/src/net/i2p/router/Blocklist.java:734 +#, java-format +msgid "IP banned by blocklist.txt entry {0}" +msgstr "按IP黑名单blocklist.txt封杀的节点{0}" + +#: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:91 +msgid "Rejecting tunnels: Shutting down" +msgstr "拒绝共享:准备退出" + +#: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:140 +msgid "Rejecting tunnels: High message delay" +msgstr "拒绝共享:高消息延迟" + +#: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:176 +msgid "Rejecting most tunnels: High number of requests" +msgstr "收紧共享:高请求量" + +#: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:232 +msgid "Rejecting tunnels: Limit reached" +msgstr "拒绝共享:隧道数限额" + +#: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:300 +msgid "Rejecting tunnels: Bandwidth limit" +msgstr "拒绝共享:带宽限额" + +#: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:370 +msgid "Rejecting most tunnels: Bandwidth limit" +msgstr "收紧共享:带宽限额" + +#: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:374 +msgid "Accepting most tunnels" +msgstr "接收多数隧道" + +#: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:376 +msgid "Accepting tunnels" +msgstr "接收共享隧道" + +#: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:486 +msgid "Rejecting tunnels" +msgstr "拒绝参与共享隧道" + +#: ../../../router/java/src/net/i2p/router/transport/GetBidsJob.java:70 +msgid "No transports (hidden or starting up?)" +msgstr "无数据传输(隐身或正在启动)" + +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:450 +msgid "Unreachable on any transport" +msgstr "各传输方式均不可达" + +#: ../../../router/java/src/net/i2p/router/transport/ntcp/EstablishState.java:380 +#: ../../../router/java/src/net/i2p/router/transport/ntcp/EstablishState.java:594 +#, java-format +msgid "Excessive clock skew: {0}" +msgstr "严重时滞:{0}" + +#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:137 +msgid "Dropping tunnel requests: Too slow" +msgstr "忽略共享请求:速度太慢" + +#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:354 +msgid "Dropping tunnel requests: Overloaded" +msgstr "忽略共享请求:路由过载" + +#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:521 +msgid "Rejecting tunnels: Request overload" +msgstr "拒绝共享:请求过多" + +#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:546 +msgid "Rejecting tunnels: Connection limit" +msgstr "拒绝共享:连接受限" + +#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:748 +msgid "Dropping tunnel requests: High load" +msgstr "忽略共享请求:高负载" + +#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:757 +msgid "Dropping tunnel requests: Queue time" +msgstr "忽略共享请求:队列积压" + +#: ../java/build/Countries.java:3 +msgid "Andorra" +msgstr "安道尔" + +#: ../java/build/Countries.java:4 +msgid "United Arab Emirates" +msgstr "阿联酋" + +#: ../java/build/Countries.java:5 +msgid "Afghanistan" +msgstr "阿富汗" + +#: ../java/build/Countries.java:6 +msgid "Antigua and Barbuda" +msgstr "安提瓜与巴布达" + +#: ../java/build/Countries.java:7 +msgid "Anguilla" +msgstr "安格拉" + +#: ../java/build/Countries.java:8 +msgid "Albania" +msgstr "阿尔巴尼亚" + +#: ../java/build/Countries.java:9 +msgid "Armenia" +msgstr "亚美尼亚" + +#: ../java/build/Countries.java:10 +msgid "Netherlands Antilles" +msgstr "荷兰属地" + +#: ../java/build/Countries.java:11 +msgid "Angola" +msgstr "安哥拉" + +#: ../java/build/Countries.java:12 +msgid "Antarctica" +msgstr "南极洲" + +#: ../java/build/Countries.java:13 +msgid "Argentina" +msgstr "阿根廷" + +#: ../java/build/Countries.java:14 +msgid "American Samoa" +msgstr "东萨摩亚" + +#: ../java/build/Countries.java:15 +msgid "Austria" +msgstr "奥地利" + +#: ../java/build/Countries.java:16 +msgid "Australia" +msgstr "澳大利亚" + +#: ../java/build/Countries.java:17 +msgid "Aruba" +msgstr "阿鲁巴" + +#: ../java/build/Countries.java:19 +msgid "Azerbaijan" +msgstr "阿塞拜疆" + +#: ../java/build/Countries.java:20 +msgid "Bosnia and Herzegovina" +msgstr "波黑" + +#: ../java/build/Countries.java:21 +msgid "Barbados" +msgstr "巴巴多斯" + +#: ../java/build/Countries.java:22 +msgid "Bangladesh" +msgstr "孟加拉" + +#: ../java/build/Countries.java:23 +msgid "Belgium" +msgstr "比利时" + +#: ../java/build/Countries.java:24 +msgid "Burkina Faso" +msgstr "布基纳法索" + +#: ../java/build/Countries.java:25 +msgid "Bulgaria" +msgstr "保加利亚" + +#: ../java/build/Countries.java:26 +msgid "Bahrain" +msgstr "巴林" + +#: ../java/build/Countries.java:27 +msgid "Burundi" +msgstr "不丹" + +#: ../java/build/Countries.java:28 +msgid "Benin" +msgstr "贝宁" + +#: ../java/build/Countries.java:29 +msgid "Bermuda" +msgstr "百慕大" + +#: ../java/build/Countries.java:30 +msgid "Brunei Darussalam" +msgstr "文莱达鲁萨兰" + +#: ../java/build/Countries.java:31 +msgid "Bolivia" +msgstr "玻利维亚" + +#: ../java/build/Countries.java:32 +msgid "Brazil" +msgstr "巴西" + +#: ../java/build/Countries.java:33 +msgid "Bahamas" +msgstr "巴哈马" + +#: ../java/build/Countries.java:34 +msgid "Bhutan" +msgstr "不丹" + +#: ../java/build/Countries.java:35 +msgid "Bouvet Island" +msgstr "布韦群岛" + +#: ../java/build/Countries.java:36 +msgid "Botswana" +msgstr "伯兹瓦纳" + +#: ../java/build/Countries.java:37 +msgid "Belarus" +msgstr "白俄罗斯" + +#: ../java/build/Countries.java:38 +msgid "Belize" +msgstr "伯利兹" + +#: ../java/build/Countries.java:39 +msgid "Canada" +msgstr "加拿大" + +#: ../java/build/Countries.java:40 +msgid "The Democratic Republic of the Congo" +msgstr "刚果" + +#: ../java/build/Countries.java:41 +msgid "Central African Republic" +msgstr "中非" + +#: ../java/build/Countries.java:42 +msgid "Congo" +msgstr "Congo" + +#: ../java/build/Countries.java:43 +msgid "Switzerland" +msgstr "瑞士" + +#: ../java/build/Countries.java:44 +msgid "Cote D'Ivoire" +msgstr "象牙海岸" + +#: ../java/build/Countries.java:45 +msgid "Cook Islands" +msgstr "库克群岛" + +#: ../java/build/Countries.java:46 +msgid "Chile" +msgstr "智利" + +#: ../java/build/Countries.java:47 +msgid "Cameroon" +msgstr "喀麦隆" + +#: ../java/build/Countries.java:48 +msgid "China" +msgstr "中国" + +#: ../java/build/Countries.java:49 +msgid "Colombia" +msgstr "哥伦比亚" + +#: ../java/build/Countries.java:50 +msgid "Costa Rica" +msgstr "哥斯达黎加" + +#: ../java/build/Countries.java:51 +msgid "Serbia and Montenegro" +msgstr "塞尔维亚与黑山" + +#: ../java/build/Countries.java:52 +msgid "Cuba" +msgstr "古巴" + +#: ../java/build/Countries.java:53 +msgid "Cape Verde" +msgstr "佛得角" + +#: ../java/build/Countries.java:54 +msgid "Cyprus" +msgstr "塞浦路斯" + +#: ../java/build/Countries.java:55 +msgid "Czech Republic" +msgstr "捷克" + +#: ../java/build/Countries.java:56 +msgid "Germany" +msgstr "德国" + +#: ../java/build/Countries.java:57 +msgid "Djibouti" +msgstr "吉布提" + +#: ../java/build/Countries.java:58 +msgid "Denmark" +msgstr "丹麦" + +#: ../java/build/Countries.java:59 +msgid "Dominica" +msgstr "多米尼" + +#: ../java/build/Countries.java:60 +msgid "Dominican Republic" +msgstr "多米尼加联邦" + +#: ../java/build/Countries.java:61 +msgid "Algeria" +msgstr "阿尔及利亚" + +#: ../java/build/Countries.java:62 +msgid "Ecuador" +msgstr "厄瓜多尔" + +#: ../java/build/Countries.java:63 +msgid "Estonia" +msgstr "爱沙尼亚" + +#: ../java/build/Countries.java:64 +msgid "Egypt" +msgstr "埃及" + +#: ../java/build/Countries.java:65 +msgid "Eritrea" +msgstr "厄立特里亚" + +#: ../java/build/Countries.java:66 +msgid "Spain" +msgstr "西班牙" + +#: ../java/build/Countries.java:67 +msgid "Ethiopia" +msgstr "埃塞俄比亚" + +#: ../java/build/Countries.java:68 +msgid "Finland" +msgstr "芬兰" + +#: ../java/build/Countries.java:69 +msgid "Fiji" +msgstr "斐济" + +#: ../java/build/Countries.java:70 +msgid "Falkland Islands (Malvinas)" +msgstr "福克兰群岛" + +#: ../java/build/Countries.java:71 +msgid "Federated States of Micronesia" +msgstr "密克罗尼西亚" + +#: ../java/build/Countries.java:72 +msgid "Faroe Islands" +msgstr "法罗群岛" + +#: ../java/build/Countries.java:73 +msgid "France" +msgstr "法国" + +#: ../java/build/Countries.java:74 +msgid "Gabon" +msgstr "加蓬" + +#: ../java/build/Countries.java:75 +msgid "United Kingdom" +msgstr "英国" + +#: ../java/build/Countries.java:76 +msgid "Grenada" +msgstr "格林纳达" + +#: ../java/build/Countries.java:77 +msgid "Georgia" +msgstr "格鲁吉亚" + +#: ../java/build/Countries.java:78 +msgid "French Guiana" +msgstr "圭亚那" + +#: ../java/build/Countries.java:79 +msgid "Ghana" +msgstr "加纳" + +#: ../java/build/Countries.java:80 +msgid "Gibraltar" +msgstr "直布罗陀" + +#: ../java/build/Countries.java:81 +msgid "Greenland" +msgstr "格陵兰群岛" + +#: ../java/build/Countries.java:82 +msgid "Gambia" +msgstr "冈比亚" + +#: ../java/build/Countries.java:83 +msgid "Guinea" +msgstr "几内亚" + +#: ../java/build/Countries.java:84 +msgid "Guadeloupe" +msgstr "瓜德罗普岛" + +#: ../java/build/Countries.java:85 +msgid "Equatorial Guinea" +msgstr "赤道几内亚" + +#: ../java/build/Countries.java:86 +msgid "Greece" +msgstr "希腊" + +#: ../java/build/Countries.java:87 +msgid "South Georgia and the South Sandwich Islands" +msgstr "南乔治亚岛和南桑德韦奇岛" + +#: ../java/build/Countries.java:88 +msgid "Guatemala" +msgstr "危地马拉" + +#: ../java/build/Countries.java:89 +msgid "Guam" +msgstr "关岛" + +#: ../java/build/Countries.java:90 +msgid "Guinea-Bissau" +msgstr "几内亚比绍" + +#: ../java/build/Countries.java:91 +msgid "Guyana" +msgstr "圭亚那" + +#: ../java/build/Countries.java:92 +msgid "Hong Kong" +msgstr "香港" + +#: ../java/build/Countries.java:93 +msgid "Honduras" +msgstr "洪都拉斯" + +#: ../java/build/Countries.java:94 +msgid "Croatia" +msgstr "克罗蒂亚" + +#: ../java/build/Countries.java:95 +msgid "Haiti" +msgstr "海地" + +#: ../java/build/Countries.java:96 +msgid "Hungary" +msgstr "匈牙利" + +#: ../java/build/Countries.java:97 +msgid "Indonesia" +msgstr "印尼" + +#: ../java/build/Countries.java:98 +msgid "Ireland" +msgstr "爱尔兰" + +#: ../java/build/Countries.java:99 +msgid "Israel" +msgstr "以色列" + +#: ../java/build/Countries.java:101 +msgid "India" +msgstr "印度" + +#: ../java/build/Countries.java:102 +msgid "British Indian Ocean Territory" +msgstr "英属印度洋地区" + +#: ../java/build/Countries.java:103 +msgid "Iraq" +msgstr "伊拉克" + +#: ../java/build/Countries.java:104 +msgid "Islamic Republic of Iran" +msgstr "伊朗" + +#: ../java/build/Countries.java:105 +msgid "Iceland" +msgstr "冰岛" + +#: ../java/build/Countries.java:106 +msgid "Italy" +msgstr "意大利" + +#: ../java/build/Countries.java:108 +msgid "Jamaica" +msgstr "牙买加" + +#: ../java/build/Countries.java:109 +msgid "Jordan" +msgstr "约旦" + +#: ../java/build/Countries.java:110 +msgid "Japan" +msgstr "日本" + +#: ../java/build/Countries.java:111 +msgid "Kenya" +msgstr "肯尼亚" + +#: ../java/build/Countries.java:112 +msgid "Kyrgyzstan" +msgstr "吉尔吉斯斯坦" + +#: ../java/build/Countries.java:113 +msgid "Cambodia" +msgstr "柬埔塞" + +#: ../java/build/Countries.java:114 +msgid "Kiribati" +msgstr "基里巴斯" + +#: ../java/build/Countries.java:115 +msgid "Comoros" +msgstr "科摩罗" + +#: ../java/build/Countries.java:116 +msgid "Saint Kitts and Nevis" +msgstr "圣克里斯多福与尼维斯" + +#: ../java/build/Countries.java:117 +msgid "Republic of Korea" +msgstr "韩国" + +#: ../java/build/Countries.java:118 +msgid "Kuwait" +msgstr "科威特" + +#: ../java/build/Countries.java:119 +msgid "Cayman Islands" +msgstr "开曼群岛" + +#: ../java/build/Countries.java:120 +msgid "Kazakhstan" +msgstr "哈萨克斯坦" + +#: ../java/build/Countries.java:121 +msgid "Lao People's Democratic Republic" +msgstr "老挝" + +#: ../java/build/Countries.java:122 +msgid "Lebanon" +msgstr "黎巴嫩" + +#: ../java/build/Countries.java:123 +msgid "Saint Lucia" +msgstr "圣露西亚岛" + +#: ../java/build/Countries.java:124 +msgid "Liechtenstein" +msgstr "列支敦士登" + +#: ../java/build/Countries.java:125 +msgid "Sri Lanka" +msgstr "斯里兰卡" + +#: ../java/build/Countries.java:126 +msgid "Liberia" +msgstr "利比里亚" + +#: ../java/build/Countries.java:127 +msgid "Lesotho" +msgstr "莱索托" + +#: ../java/build/Countries.java:128 +msgid "Lithuania" +msgstr "立陶宛" + +#: ../java/build/Countries.java:129 +msgid "Luxembourg" +msgstr "卢森堡" + +#: ../java/build/Countries.java:130 +msgid "Latvia" +msgstr "拉脱维亚" + +#: ../java/build/Countries.java:131 +msgid "Libyan Arab Jamahiriya" +msgstr "利比亚" + +#: ../java/build/Countries.java:132 +msgid "Morocco" +msgstr "摩洛哥" + +#: ../java/build/Countries.java:133 +msgid "Monaco" +msgstr "摩纳哥" + +#: ../java/build/Countries.java:134 +msgid "Republic of Moldova" +msgstr "摩尔多瓦" + +#: ../java/build/Countries.java:137 +msgid "Madagascar" +msgstr "马达加斯加" + +#: ../java/build/Countries.java:138 +msgid "Marshall Islands" +msgstr "马绍尔群岛" + +#: ../java/build/Countries.java:139 +msgid "The Former Yugoslav Republic of Macedonia" +msgstr "前南斯拉夫之马其顿共和国" + +#: ../java/build/Countries.java:140 +msgid "Mali" +msgstr "马里" + +#: ../java/build/Countries.java:141 +msgid "Myanmar" +msgstr "缅甸" + +#: ../java/build/Countries.java:142 +msgid "Mongolia" +msgstr "蒙古" + +#: ../java/build/Countries.java:143 +msgid "Macao" +msgstr "澳门" + +#: ../java/build/Countries.java:144 +msgid "Northern Mariana Islands" +msgstr "北马里亚纳群岛" + +#: ../java/build/Countries.java:145 +msgid "Martinique" +msgstr "马提尼克岛" + +#: ../java/build/Countries.java:146 +msgid "Mauritania" +msgstr "毛里塔尼亚" + +#: ../java/build/Countries.java:147 +msgid "Montserrat" +msgstr "蒙特塞拉特" + +#: ../java/build/Countries.java:148 +msgid "Malta" +msgstr "马尔他" + +#: ../java/build/Countries.java:149 +msgid "Mauritius" +msgstr "毛里求斯" + +#: ../java/build/Countries.java:150 +msgid "Maldives" +msgstr "马尔代夫" + +#: ../java/build/Countries.java:151 +msgid "Malawi" +msgstr "马拉维" + +#: ../java/build/Countries.java:152 +msgid "Mexico" +msgstr "墨西哥" + +#: ../java/build/Countries.java:153 +msgid "Malaysia" +msgstr "马来西亚" + +#: ../java/build/Countries.java:154 +msgid "Mozambique" +msgstr "莫桑比克" + +#: ../java/build/Countries.java:155 +msgid "Namibia" +msgstr "纳米比亚" + +#: ../java/build/Countries.java:156 +msgid "New Caledonia" +msgstr "新喀里多尼亚" + +#: ../java/build/Countries.java:157 +msgid "Niger" +msgstr "尼日尔" + +#: ../java/build/Countries.java:158 +msgid "Norfolk Island" +msgstr "尼加拉瓜" + +#: ../java/build/Countries.java:159 +msgid "Nigeria" +msgstr "尼日利亚" + +#: ../java/build/Countries.java:160 +msgid "Nicaragua" +msgstr "尼加拉瓜" + +#: ../java/build/Countries.java:161 +msgid "Netherlands" +msgstr "荷兰" + +#: ../java/build/Countries.java:162 +msgid "Norway" +msgstr "挪威" + +#: ../java/build/Countries.java:163 +msgid "Nepal" +msgstr "尼泊尔" + +#: ../java/build/Countries.java:164 +msgid "Nauru" +msgstr "瑙鲁" + +#: ../java/build/Countries.java:165 +msgid "Niue" +msgstr "纽埃岛" + +#: ../java/build/Countries.java:166 +msgid "New Zealand" +msgstr "新西兰" + +#: ../java/build/Countries.java:167 +msgid "Oman" +msgstr "阿曼" + +#: ../java/build/Countries.java:168 +msgid "Panama" +msgstr "巴拿马" + +#: ../java/build/Countries.java:169 +msgid "Peru" +msgstr "秘鲁" + +#: ../java/build/Countries.java:170 +msgid "French Polynesia" +msgstr "玻利尼西亚" + +#: ../java/build/Countries.java:171 +msgid "Papua New Guinea" +msgstr "巴布亚新几内亚" + +#: ../java/build/Countries.java:172 +msgid "Philippines" +msgstr "菲律宾" + +#: ../java/build/Countries.java:173 +msgid "Pakistan" +msgstr "巴基斯坦" + +#: ../java/build/Countries.java:174 +msgid "Poland" +msgstr "波兰" + +#: ../java/build/Countries.java:175 +msgid "Saint Pierre and Miquelon" +msgstr "圣皮埃尔岛和密克隆" + +#: ../java/build/Countries.java:176 +msgid "Puerto Rico" +msgstr "波多黎各" + +#: ../java/build/Countries.java:177 +msgid "Palestinian Territory" +msgstr "巴勒斯坦地区" + +#: ../java/build/Countries.java:178 +msgid "Portugal" +msgstr "葡萄牙" + +#: ../java/build/Countries.java:179 +msgid "Palau" +msgstr "帕劳" + +#: ../java/build/Countries.java:180 +msgid "Paraguay" +msgstr "巴拉圭" + +#: ../java/build/Countries.java:181 +msgid "Qatar" +msgstr "卡塔尔" + +#: ../java/build/Countries.java:182 +msgid "Reunion" +msgstr "留尼汪岛" + +#: ../java/build/Countries.java:183 +msgid "Romania" +msgstr "罗马尼亚" + +#: ../java/build/Countries.java:184 +msgid "Serbia" +msgstr "塞尔维亚" + +#: ../java/build/Countries.java:185 +msgid "Russian Federation" +msgstr "俄联邦" + +#: ../java/build/Countries.java:186 +msgid "Rwanda" +msgstr "卢旺达" + +#: ../java/build/Countries.java:187 +msgid "Saudi Arabia" +msgstr "沙特阿拉伯" + +#: ../java/build/Countries.java:188 +msgid "Solomon Islands" +msgstr "所罗门群岛" + +#: ../java/build/Countries.java:189 +msgid "Seychelles" +msgstr "塞舌尔" + +#: ../java/build/Countries.java:190 +msgid "Sudan" +msgstr "苏丹" + +#: ../java/build/Countries.java:191 +msgid "Sweden" +msgstr "瑞典" + +#: ../java/build/Countries.java:192 +msgid "Singapore" +msgstr "新加坡" + +#: ../java/build/Countries.java:193 +msgid "Slovenia" +msgstr "斯洛文尼亚" + +#: ../java/build/Countries.java:194 +msgid "Slovakia" +msgstr "斯洛伐克" + +#: ../java/build/Countries.java:195 +msgid "Sierra Leone" +msgstr "塞拉利昂" + +#: ../java/build/Countries.java:196 +msgid "San Marino" +msgstr "圣马力诺" + +#: ../java/build/Countries.java:197 +msgid "Senegal" +msgstr "塞内加尔" + +#: ../java/build/Countries.java:198 +msgid "Somalia" +msgstr "索马里" + +#: ../java/build/Countries.java:199 +msgid "Suriname" +msgstr "苏里南" + +#: ../java/build/Countries.java:200 +msgid "Sao Tome and Principe" +msgstr "圣多美与普林西比共和国" + +#: ../java/build/Countries.java:201 +msgid "El Salvador" +msgstr "萨尔瓦多" + +#: ../java/build/Countries.java:202 +msgid "Syrian Arab Republic" +msgstr "叙利亚" + +#: ../java/build/Countries.java:203 +msgid "Swaziland" +msgstr "斯威士兰" + +#: ../java/build/Countries.java:204 +msgid "Turks and Caicos Islands" +msgstr "特克斯和凯科斯群岛" + +#: ../java/build/Countries.java:205 +msgid "Chad" +msgstr "乍得" + +#: ../java/build/Countries.java:206 +msgid "French Southern Territories" +msgstr "法属南半球领地" + +#: ../java/build/Countries.java:207 +msgid "Togo" +msgstr "多哥" + +#: ../java/build/Countries.java:208 +msgid "Thailand" +msgstr "泰国" + +#: ../java/build/Countries.java:209 +msgid "Tajikistan" +msgstr "塔吉克斯坦" + +#: ../java/build/Countries.java:210 +msgid "Tokelau" +msgstr "托克劳群岛" + +#: ../java/build/Countries.java:211 +msgid "Timor-Leste" +msgstr "东帝汶" + +#: ../java/build/Countries.java:212 +msgid "Turkmenistan" +msgstr "土库曼斯坦" + +#: ../java/build/Countries.java:213 +msgid "Tunisia" +msgstr "突尼斯" + +#: ../java/build/Countries.java:214 +msgid "Tonga" +msgstr "汤加" + +#: ../java/build/Countries.java:215 +msgid "Turkey" +msgstr "土耳其" + +#: ../java/build/Countries.java:216 +msgid "Trinidad and Tobago" +msgstr "特立尼达和多巴哥" + +#: ../java/build/Countries.java:217 +msgid "Tuvalu" +msgstr "图瓦鲁" + +#: ../java/build/Countries.java:218 +msgid "Taiwan" +msgstr "台湾" + +#: ../java/build/Countries.java:219 +msgid "United Republic of Tanzania" +msgstr "坦桑尼亚" + +#: ../java/build/Countries.java:220 +msgid "Ukraine" +msgstr "乌克兰" + +#: ../java/build/Countries.java:221 +msgid "Uganda" +msgstr "乌干达" + +#: ../java/build/Countries.java:222 +msgid "United States Minor Outlying Islands" +msgstr "美国本土外小岛屿" + +#: ../java/build/Countries.java:223 +msgid "United States" +msgstr "美国" + +#: ../java/build/Countries.java:224 +msgid "Uruguay" +msgstr "乌拉圭" + +#: ../java/build/Countries.java:225 +msgid "Uzbekistan" +msgstr "乌兹别克斯坦" + +#: ../java/build/Countries.java:226 +msgid "Holy See (Vatican City State)" +msgstr "梵地冈" + +#: ../java/build/Countries.java:227 +msgid "Saint Vincent and the Grenadines" +msgstr "圣文森特和格林纳丁斯" + +#: ../java/build/Countries.java:228 +msgid "Venezuela" +msgstr "委内瑞拉" + +#: ../java/build/Countries.java:229 +#: ../java/build/Countries.java:230 +msgid "Virgin Islands" +msgstr "维京群岛" + +#: ../java/build/Countries.java:231 +msgid "Viet Nam" +msgstr "越南" + +#: ../java/build/Countries.java:232 +msgid "Vanuatu" +msgstr "瓦努阿图" + +#: ../java/build/Countries.java:233 +msgid "Wallis and Futuna" +msgstr "瓦利斯群岛和富图纳群岛" + +#: ../java/build/Countries.java:234 +msgid "Samoa" +msgstr "东萨摩亚" + +#: ../java/build/Countries.java:235 +msgid "Yemen" +msgstr "也门" + +#: ../java/build/Countries.java:236 +msgid "Mayotte" +msgstr "马约特" + +#: ../java/build/Countries.java:237 +msgid "South Africa" +msgstr "南非" + +#: ../java/build/Countries.java:238 +msgid "Zambia" +msgstr "赞比亚" + +#: ../java/build/Countries.java:239 +msgid "Zimbabwe" +msgstr "津巴布韦" + +#: ../java/src/net/i2p/router/web/CSSHelper.java:54 +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:30 +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:32 +#: ../java/strings/Strings.java:29 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/index_jsp.java:234 +msgid "I2P Router Console" +msgstr "I2P 路由控制台" + +#: ../java/src/net/i2p/router/web/ConfigAdvancedHandler.java:57 +msgid "Error updating the configuration - please see the error logs" +msgstr "配置更新出错 - 请查看错误日志" + +#: ../java/src/net/i2p/router/web/ConfigAdvancedHandler.java:69 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:263 +msgid "Configuration saved successfully" +msgstr "设置保存成功" + +#: ../java/src/net/i2p/router/web/ConfigAdvancedHandler.java:71 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:265 +msgid "Error saving the configuration (applied but not saved) - please see the error logs" +msgstr "配置保存出错(已应用但未保存) - 参见错误日志" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:32 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:332 +msgid "Save Client Configuration" +msgstr "保存客户程序设置" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:36 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:344 +msgid "Save WebApp Configuration" +msgstr "保存 WebApp 设置" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:66 +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:97 +msgid "Start" +msgstr "启动" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:80 +#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:49 +msgid "Unsupported" +msgstr "未支持的" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:94 +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:110 +msgid "desc" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:105 +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:120 +msgid "name" +msgstr "名称" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:125 +msgid "New client added" +msgstr "新客户端添加完毕" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:129 +msgid "Client configuration saved successfully - restart required to take effect." +msgstr "客户程序设置保存成功 - 程序重启后生效" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:143 +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:154 +msgid "Bad client index." +msgstr "客户程序索引无效" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:148 +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:159 +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:36 +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:370 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:384 +msgid "Client" +msgstr "客户" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:148 +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:194 +msgid "started" +msgstr "已启动" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:159 +msgid "deleted" +msgstr "已删除" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:176 +msgid "WebApp configuration saved successfully - restart required to take effect." +msgstr "WebApp设置保存成功 - 程序重启后生效" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:194 +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:55 +msgid "WebApp" +msgstr "Web程序" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:196 +msgid "Failed to start" +msgstr "启动失败" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:202 +msgid "Failed to find server." +msgstr "服务器或服务程序查找失败。" + +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:19 +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:100 +msgid "Edit" +msgstr "编辑" + +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:28 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:328 +msgid "Add Client" +msgstr "添加客户端" + +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:36 +msgid "Class and arguments" +msgstr "类与参数" + +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:36 +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:55 +msgid "Run at Startup?" +msgstr "启动时运行?" + +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:36 +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:55 +msgid "Start Now" +msgstr "立即启动" + +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:55 +msgid "Description" +msgstr "描述" + +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:101 +msgid "Delete" +msgstr "删除" + +#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:18 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:320 +msgid "Add key" +msgstr "添加密钥" + +#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:19 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:322 +msgid "Delete key" +msgstr "删除密钥" + +#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:21 +msgid "You must enter a destination" +msgstr "您必须输入一个目标" + +#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:23 +msgid "You must enter a key" +msgstr "您必须输入一个密钥" + +#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:34 +#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:41 +#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:43 +msgid "Key for" +msgstr "密钥" + +#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:34 +msgid "added to keyring" +msgstr "已加入钥匙环" + +#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:36 +msgid "Invalid destination or key" +msgstr "目标或密钥无效" + +#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:41 +msgid "removed from keyring" +msgstr "已从钥匙环中删除" + +#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:43 +msgid "not found in keyring" +msgstr "在钥匙环未找到" + +#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:45 +msgid "Invalid destination" +msgstr "目标无效" + +#: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:46 +msgid "Add additional logging statements above. Example: net.i2p.router.tunnel=WARN" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:47 +msgid "Or put entries in the logger.config file. Example: logger.record.net.i2p.router.tunnel=WARN" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:48 +msgid "Valid levels are DEBUG, INFO, WARN, ERROR, CRIT" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:52 +msgid "CRIT" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:52 +msgid "DEBUG" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:52 +msgid "ERROR" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:52 +msgid "INFO" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:52 +msgid "WARN" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:18 +msgid "Network" +msgstr "网络" + +#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:18 +msgid "Service" +msgstr "服务" + +#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:18 +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:86 +#: ../java/strings/Strings.java:72 +msgid "Tunnels" +msgstr "隧道" + +#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:18 +msgid "UI" +msgstr "界面" + +#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:18 +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:209 +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:216 +msgid "Update" +msgstr "更新" + +#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:19 +msgid "Clients" +msgstr "客户端" + +#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:19 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:292 +msgid "Keyring" +msgstr "钥匙环" + +#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:19 +msgid "Logging" +msgstr "日志" + +#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:19 +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:92 +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:234 +#: ../java/strings/Strings.java:67 +msgid "Peers" +msgstr "节点" + +#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:19 +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:294 +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:128 +msgid "Stats" +msgstr "统计" + +#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:20 +msgid "Advanced" +msgstr "高级" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:48 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:261 +#: ../java/src/net/i2p/router/web/ConfigTunnelsHandler.java:35 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:357 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:502 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:333 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:373 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:341 +msgid "Save changes" +msgstr "保存修改" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:121 +msgid "Rechecking router reachability..." +msgstr "正在重检查路由连通性..." + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:150 +msgid "Updating IP address" +msgstr "正在更新IP地址" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:168 +msgid "Disabling TCP completely" +msgstr "正在彻底禁用TCP" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:172 +msgid "Updating inbound TCP address to" +msgstr "正在更新进站TCP地址至" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:176 +msgid "Disabling inbound TCP" +msgstr "正在禁用入站TCP" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:178 +msgid "Updating inbound TCP address to auto" +msgstr "正在更新入站TCP地址至" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:187 +msgid "Updating inbound TCP port to" +msgstr "正在更新入站TCP端口至" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:190 +msgid "Updating inbound TCP port to auto" +msgstr "正在更新入站TCP端口至" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:202 +msgid "Updating UDP port from" +msgstr "正在更新UDP端口由" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:202 +msgid "to" +msgstr "至" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:218 +msgid "Gracefully restarting into Hidden Router Mode" +msgstr "正在平滑重启路由进入隐身模式" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:220 +msgid "Gracefully restarting to exit Hidden Router Mode" +msgstr "正在平滑重启路由退出隐身模式" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:229 +msgid "Enabling UPnP, restart required to take effect" +msgstr "正在启用UPnP,程序重启后生效" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:231 +msgid "Disabling UPnP, restart required to take effect" +msgstr "正在禁用UPnP,程序重启后生效" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:239 +msgid "Enabling laptop mode" +msgstr "正在启用笔记本模式" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:241 +msgid "Disabling laptop mode" +msgstr "正在禁用笔记本模式" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:247 +msgid "Requiring SSU introducers" +msgstr "正在获取SSU中介" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:288 +msgid "Gracefully restarting I2P to change published router address" +msgstr "正在平滑重启路由重新发布路由地址" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:308 +msgid "Updating bandwidth share percentage" +msgstr "正在更新共享带宽比例" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:378 +msgid "Updated bandwidth limits" +msgstr "带宽限制更新完毕" + +#: ../java/src/net/i2p/router/web/ConfigNetHelper.java:39 +#: ../java/src/net/i2p/router/web/ConfigNetHelper.java:47 +#: ../java/src/net/i2p/router/web/ConfigNetHelper.java:50 +#: ../java/src/net/i2p/router/web/ConfigNetHelper.java:57 +#: ../java/src/net/i2p/router/web/ConfigNetHelper.java:60 +msgid "unknown" +msgstr "未知" + +#: ../java/src/net/i2p/router/web/ConfigNetHelper.java:169 +msgid "bits per second" +msgstr "比特/秒" + +#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:20 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:314 +msgid "Ban peer until restart" +msgstr "封杀节点直到重启" + +#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:23 +#, java-format +msgid "Manually banned via {0}" +msgstr "通过{0}手动封锁" + +#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:24 +#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:33 +#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:35 +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:81 +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:187 +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:235 +msgid "Peer" +msgstr "节点" + +#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:24 +msgid "banned until restart" +msgstr "已封锁直到重启" + +#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:27 +#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:38 +#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:59 +msgid "Invalid peer" +msgstr "无效节点" + +#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:28 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:316 +msgid "Unban peer" +msgstr "节点解封" + +#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:33 +msgid "unbanned" +msgstr "已解封" + +#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:35 +msgid "is not currently banned" +msgstr "目前未封锁" + +#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:39 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:322 +msgid "Adjust Profile Bonuses" +msgstr "调整节点评分" + +#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:47 +msgid "Bad speed value" +msgstr "速度值无效" + +#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:52 +msgid "Bad capacity value" +msgstr "容量值无效" + +#: ../java/src/net/i2p/router/web/ConfigRestartBean.java:32 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:57 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:292 +msgid "Shutdown immediately" +msgstr "立刻关闭" + +#: ../java/src/net/i2p/router/web/ConfigRestartBean.java:36 +msgid "Cancel shutdown" +msgstr "取消关闭" + +#: ../java/src/net/i2p/router/web/ConfigRestartBean.java:37 +msgid "Cancel restart" +msgstr "取消重启" + +#: ../java/src/net/i2p/router/web/ConfigRestartBean.java:39 +msgid "Restart immediately" +msgstr "立刻重启" + +#: ../java/src/net/i2p/router/web/ConfigRestartBean.java:43 +msgid "Restart" +msgstr "重 启" + +#: ../java/src/net/i2p/router/web/ConfigRestartBean.java:46 +msgid "Shutdown" +msgstr "关 闭" + +#: ../java/src/net/i2p/router/web/ConfigRestartBean.java:59 +msgid "Restart imminent" +msgstr "立刻重启" + +#: ../java/src/net/i2p/router/web/ConfigRestartBean.java:61 +msgid "Shutdown imminent" +msgstr "立刻关闭" + +#: ../java/src/net/i2p/router/web/ConfigRestartBean.java:65 +#, java-format +msgid "Shutdown in {0}" +msgstr "{0} 后退出" + +#: ../java/src/net/i2p/router/web/ConfigRestartBean.java:70 +#, java-format +msgid "Restart in {0}" +msgstr "{0} 后重启" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:53 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:290 +msgid "Shutdown gracefully" +msgstr "平滑关闭" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:56 +msgid "Graceful shutdown initiated" +msgstr "开始平滑关闭" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:60 +msgid "Shutdown immediately! boom bye bye bad bwoy" +msgstr "立即关闭!不推荐" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:61 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:294 +msgid "Cancel graceful shutdown" +msgstr "取消平滑关闭" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:63 +msgid "Graceful shutdown cancelled" +msgstr "平滑关闭已取消" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:64 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:306 +msgid "Graceful restart" +msgstr "平滑重启" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:67 +msgid "Graceful restart requested" +msgstr "平滑重启已请求" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:68 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:308 +msgid "Hard restart" +msgstr "硬重启" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:71 +msgid "Hard restart requested" +msgstr "硬重启已请求" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:72 +msgid "Rekey and Restart" +msgstr "更换密钥并重启" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:73 +msgid "Rekeying after graceful restart" +msgstr "平滑重启后更换密钥" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:76 +msgid "Rekey and Shutdown" +msgstr "更换密钥并关闭" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:77 +msgid "Rekeying after graceful shutdown" +msgstr "平滑关闭后更换密钥" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:80 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:334 +msgid "Run I2P on startup" +msgstr "系统启动时运行I2P" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:82 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:336 +msgid "Don't run I2P on startup" +msgstr "系统启动时不运行I2P" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:84 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:354 +msgid "Dump threads" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:91 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:322 +msgid "Show systray icon" +msgstr "显示托盘图标" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:96 +msgid "System tray icon enabled." +msgstr "系统托盘图标已启用" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:98 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:110 +msgid "System tray icon feature not supported on this platform. Sorry!" +msgstr "您的平台不支持系统托盘图标功能" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:101 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:113 +msgid "Warning: unable to contact the systray manager" +msgstr "警告:与托盘管理器通讯失败" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:103 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:324 +msgid "Hide systray icon" +msgstr "隐藏系统图标" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:108 +msgid "System tray icon disabled." +msgstr "系统托盘已禁用" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:115 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:362 +msgid "View console on startup" +msgstr "程序启动时显示控制台" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:117 +msgid "Console is to be shown on startup" +msgstr "启动后显示控制台" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:118 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:364 +msgid "Do not view console on startup" +msgstr "启动后不打开控制台" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:120 +msgid "Console is not to be shown on startup" +msgstr "启动后不显示控制台" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:129 +msgid "Service installed" +msgstr "服务已安装" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:131 +msgid "Warning: unable to install the service" +msgstr "警告:无法安装服务" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:137 +msgid "Service removed" +msgstr "服务已卸载" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:139 +msgid "Warning: unable to remove the service" +msgstr "警告:无法卸载服务" + +#: ../java/src/net/i2p/router/web/ConfigStatsHandler.java:118 +msgid "Stat filter and location updated successfully to" +msgstr "统计数据过滤器及位置成功更新至" + +#: ../java/src/net/i2p/router/web/ConfigStatsHandler.java:120 +msgid "Failed to update the stat filter and location" +msgstr "统计数据过滤器及地址更新失败" + +#: ../java/src/net/i2p/router/web/ConfigStatsHandler.java:121 +msgid "Graph list updated, may take up to 60s to be reflected here and on the Graphs Page" +msgstr "曲线图列表已更新,更新后的内容可能需要最多 60s 的时间才能在这里及 统计图表页面中反映出来。" + +#: ../java/src/net/i2p/router/web/ConfigTunnelsHandler.java:137 +msgid "Updated settings for all pools." +msgstr "隧道池更新完毕" + +#: ../java/src/net/i2p/router/web/ConfigTunnelsHandler.java:142 +msgid "Exploratory tunnel configuration saved successfully." +msgstr "探索隧道设置保存成功。" + +#: ../java/src/net/i2p/router/web/ConfigTunnelsHandler.java:144 +#: ../java/src/net/i2p/router/web/ConfigUIHandler.java:36 +msgid "Error saving the configuration (applied but not saved) - please see the error logs." +msgstr "配置保存出错(已应用但未保存) - 参见错误日志" + +#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:11 +msgid "hop" +msgstr "跳点" + +#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:12 +msgid "tunnel" +msgstr "隧道" + +#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:14 +msgid "hops" +msgstr "跳点" + +#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:15 +msgid "tunnels" +msgstr "隧道" + +#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:26 +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:41 +msgid "Exploratory tunnels" +msgstr "探测隧道" + +#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:46 +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:61 +msgid "Client tunnels for" +msgstr "客户隧道 - " + +#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:69 +msgid "ANONYMITY WARNING - Settings include 0-hop tunnels." +msgstr "匿名性警告 - 设置中包括 0-跳点 隧道" + +#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:74 +msgid "ANONYMITY WARNING - Settings include 1-hop tunnels." +msgstr "匿名性警告 - 设置中包括 1-跳点 隧道" + +#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:77 +msgid "PERFORMANCE WARNING - Settings include very long tunnels." +msgstr "性能警告 - 设置中包括长隧道" + +#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:80 +msgid "PERFORMANCE WARNING - Settings include high tunnel quantities." +msgstr "性能警告 - 设置中包括大量隧道" + +#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:82 +msgid "Inbound" +msgstr "入站" + +#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:82 +msgid "Outbound" +msgstr "出站" + +#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:87 +msgid "Length" +msgstr "长度" + +#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:104 +msgid "Randomization" +msgstr "随机" + +#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:128 +msgid "Quantity" +msgstr "数量" + +#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:145 +msgid "Backup quantity" +msgstr "备用数量" + +#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:167 +msgid "Inbound options" +msgstr "入站选项" + +#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:180 +msgid "Outbound options" +msgstr "出站选项" + +#: ../java/src/net/i2p/router/web/ConfigUIHandler.java:31 +msgid "Theme change saved." +msgstr "主题设置已保存。" + +#: ../java/src/net/i2p/router/web/ConfigUIHandler.java:33 +msgid "Refresh the page to view." +msgstr "刷新页面后查看。" + +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:41 +msgid "English" +msgstr "英语" + +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:41 +msgid "French" +msgstr "法语" + +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:41 +msgid "German" +msgstr "德语" + +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:42 +msgid "Chinese" +msgstr "中文" + +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:42 +msgid "Dutch" +msgstr "荷兰语" + +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:42 +msgid "Russian" +msgstr "俄语" + +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:42 +msgid "Swedish" +msgstr "瑞士语" + +#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:56 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:310 +msgid "Check for updates" +msgstr "检查更新" + +#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:63 +msgid "Update available, attempting to download now" +msgstr "有更新可用,正在尝试下载" + +#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:65 +msgid "Update available, click button on left to download" +msgstr "有更新可用,点左侧按钮下载" + +#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:67 +msgid "No update available" +msgstr "无更新" + +#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:75 +msgid "Updating news URL to" +msgstr "正在更新新闻链接至" + +#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:83 +msgid "Updating proxy host to" +msgstr "正在更新代理主机至" + +#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:91 +msgid "Updating proxy port to" +msgstr "正在更新代理端口至" + +#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:104 +msgid "Updating refresh frequency to" +msgstr "正在更新更新频率为" + +#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:111 +msgid "Updating update policy to" +msgstr "正在更新升级策略为" + +#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:120 +msgid "Updating update URLs." +msgstr "正在更新更新链接至" + +#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:128 +msgid "Updating trusted keys." +msgstr "正在更新可信公钥为" + +#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:136 +msgid "Updating unsigned update URL to" +msgstr "正在更新未签名软件链接至" + +#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:75 +#: ../java/src/net/i2p/router/web/GraphHelper.java:136 +msgid "Never" +msgstr "从不" + +#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:77 +msgid "Every" +msgstr "每" + +#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:90 +#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:92 +msgid "Notify only" +msgstr "只提示" + +#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:95 +#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:97 +msgid "Download and verify only" +msgstr "仅下载并验证" + +#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:101 +#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:103 +msgid "Download, verify, and restart" +msgstr "仅下载、验证并重启" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:128 +msgid "Configure Graph Display" +msgstr "图表显示设置" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:128 +msgid "Select Stats" +msgstr "选择统计项" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:130 +msgid "Periods" +msgstr "周期" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:131 +msgid "Plot averages" +msgstr "事件均值" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:132 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:405 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:332 +msgid "or" +msgstr "或" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:132 +msgid "plot events" +msgstr "事件数量" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:133 +msgid "Image sizes" +msgstr "图像尺寸" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:133 +msgid "width" +msgstr "宽度" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:134 +msgid "height" +msgstr "高度" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:134 +#: ../java/src/net/i2p/router/web/GraphHelper.java:135 +msgid "pixels" +msgstr "像素" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:136 +msgid "Refresh delay" +msgstr "刷新延迟" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:136 +msgid "hour" +msgstr "小时" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:136 +msgid "minute" +msgstr "分钟" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:136 +msgid "minutes" +msgstr "分钟" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:137 +msgid "Redraw" +msgstr "重绘" + +#: ../java/src/net/i2p/router/web/LogsHelper.java:13 +#: ../java/src/net/i2p/router/web/LogsHelper.java:37 +msgid "File location" +msgstr "文件位置" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:60 +msgid "Network Database RouterInfo Lookup" +msgstr "网络数据库 RouterInfo 检索" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:75 +#: ../java/strings/Strings.java:68 +msgid "Router" +msgstr "路由器" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:75 +msgid "not found in network database" +msgstr "在网络数据库概况未找到" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:83 +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:135 +msgid "Network Database Contents" +msgstr "网络数据库内容" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:84 +msgid "View RouterInfo" +msgstr "浏览 RouterInfo" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:85 +msgid "LeaseSets" +msgstr "赁集" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:93 +msgid "LeaseSet" +msgstr "赁集" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:95 +msgid "Local" +msgstr "本地" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:97 +msgid "Unpublished" +msgstr "未发布" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:98 +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:105 +msgid "Destination" +msgstr "目标" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:115 +#, java-format +msgid "Expires in {0}" +msgstr "{0} 后过期" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:117 +#, java-format +msgid "Expired {0} ago" +msgstr "{0}前过期" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:119 +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:156 +msgid "Gateway" +msgstr "网关" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:119 +msgid "Lease" +msgstr "租赁" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:121 +msgid "Tunnel" +msgstr "隧道" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:135 +msgid "View LeaseSets" +msgstr "查看赁集" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:137 +msgid "Not initialized" +msgstr "未初始化" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:146 +msgid "Routers" +msgstr "路由器" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:148 +msgid "Show all routers" +msgstr "显示所有路由器" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:150 +msgid "Show all routers with full stats" +msgstr "显示所有路由及统计" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:185 +msgid "Network Database Router Statistics" +msgstr "NetDb路由器统计" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:191 +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:205 +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:223 +msgid "Count" +msgstr "计数" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:191 +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:161 +msgid "Version" +msgstr "版本" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:205 +msgid "Transports" +msgstr "传输" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:223 +msgid "Country" +msgstr "国家" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:255 +msgid "Our info" +msgstr "我方信息" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:257 +msgid "Peer info for" +msgstr "节点信息" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:261 +msgid "Full entry" +msgstr "完整项" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:267 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:105 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:589 +msgid "Hidden" +msgstr "隐身" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:267 +msgid "Updated" +msgstr "已更新" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:268 +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:271 +#, java-format +msgid "{0} ago" +msgstr "{0}前" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:270 +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:274 +msgid "Published" +msgstr "发布" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:276 +msgid "Address(es)" +msgstr "地址" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:309 +msgid "Hidden or starting up" +msgstr "隐身或正在启动" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:309 +msgid "SSU" +msgstr "" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:309 +msgid "SSU with introducers" +msgstr "使用中介的SSU连接" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:310 +msgid "NTCP" +msgstr "" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:310 +msgid "NTCP and SSU" +msgstr "NTCP 与 SSU" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:310 +msgid "NTCP and SSU with introducers" +msgstr "使用中介的NTCP与SSU连接" + +#: ../java/src/net/i2p/router/web/NewsFetcher.java:80 +#, java-format +msgid "News last updated {0} ago." +msgstr "新闻更新于{0}前" + +#: ../java/src/net/i2p/router/web/NewsFetcher.java:86 +#, java-format +msgid "News last checked {0} ago." +msgstr "最近一次查收新闻在{0}前" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:72 +msgid "Peer Profiles" +msgstr "节点信息" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:73 +#, java-format +msgid "Showing {0} recent profiles." +msgstr "显示最近 {0} 个节点信息" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:75 +#, java-format +msgid "Hiding {0} older profiles." +msgstr "隐藏 {0} 个较旧的信息。" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:77 +#, java-format +msgid "Hiding {0} standard profiles." +msgstr "隐藏 {0} 个标准描述。" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:82 +msgid "Groups (Caps)" +msgstr "组(容量)" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:83 +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:251 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:334 +msgid "Speed" +msgstr "速度" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:84 +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:253 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:338 +msgid "Capacity" +msgstr "容量" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:85 +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:255 +msgid "Integration" +msgstr "整合" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:86 +msgid "Status" +msgstr "状态" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:126 +msgid "Fast, High Capacity" +msgstr "高速,高容" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:127 +msgid "High Capacity" +msgstr "高容" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:128 +msgid "Standard" +msgstr "标准" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:129 +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:163 +msgid "Failing" +msgstr "失败" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:131 +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:260 +msgid "Integrated" +msgstr "已整合节点" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:162 +msgid "Banned" +msgstr "已封锁" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:164 +msgid "Unreachable" +msgstr "不可达" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:171 +msgid "Test Fails" +msgstr "测试失败" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:175 +msgid "profile" +msgstr "节点信息" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:184 +msgid "Floodfill and Integrated Peers" +msgstr "种子节点与整合节点" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:188 +msgid "Caps" +msgstr "容量" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:189 +msgid "Integ. Value" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:190 +msgid "Last Heard About" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:191 +msgid "Last Heard From" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:192 +msgid "Last Good Send" +msgstr "上一次发送成功" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:193 +msgid "Last Bad Send" +msgstr "上一次发送失败" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:194 +msgid "10m Resp. Time" +msgstr "10m响应时间" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:195 +msgid "1h Resp. Time" +msgstr "1h响应时间" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:196 +msgid "1d Resp. Time" +msgstr "1d响应时间" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:197 +msgid "Last Good Lookup" +msgstr "上一次查询成功" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:198 +msgid "Last Bad Lookup" +msgstr "上一次查询失败" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:199 +msgid "Last Good Store" +msgstr "上一次保存成功" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:200 +msgid "Last Bad Store" +msgstr "上一次保存失败" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:201 +msgid "1h Fail Rate" +msgstr "1h失败率" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:202 +msgid "1d Fail Rate" +msgstr "1d失败率" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:250 +msgid "Thresholds" +msgstr "临界值" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:252 +msgid "fast peers" +msgstr "高速节点" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:254 +msgid "high capacity peers" +msgstr "高容节点" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:256 +msgid " well integrated peers" +msgstr "整合节点" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:257 +msgid "Definitions" +msgstr "定义" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:258 +msgid "as determined by the profile organizer" +msgstr "由节点描述信息管理器决定" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:258 +msgid "groups" +msgstr "分组" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:259 +msgid "capabilities in the netDb, not used to determine profiles" +msgstr "netDb中的容量,与描述信息无关。" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:259 +msgid "caps" +msgstr "容量" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:260 +msgid "peak throughput (bytes per second) over a 1 minute period that the peer has sustained in a single tunnel" +msgstr "该节点一分钟由单一隧道通过的数据峰值(byte/s)。" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:260 +msgid "speed" +msgstr "速度" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:261 +msgid "capacity" +msgstr "容量" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:261 +msgid "how many tunnels can we ask them to join in an hour?" +msgstr "一小时内路由可以邀请加入的隧道总量" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:262 +msgid "how many new peers have they told us about lately?" +msgstr "最近获知的新节点" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:262 +msgid "integration" +msgstr "整合" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:263 +msgid "is the peer banned, or unreachable, or failing tunnel tests?" +msgstr "是否节点被封禁,不可达,或在隧道测试中失败?" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:263 +msgid "status" +msgstr "状态" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:313 +msgid "n/a" +msgstr "" + +#: ../java/src/net/i2p/router/web/ShitlistRenderer.java:57 +#, java-format +msgid "Temporary ban expiring in {0}" +msgstr "临时封锁{0}后解除" + +#: ../java/src/net/i2p/router/web/ShitlistRenderer.java:59 +#, java-format +msgid "Banned until restart or in {0}" +msgstr "封锁直到重启或{0}后" + +#: ../java/src/net/i2p/router/web/ShitlistRenderer.java:71 +msgid "unban now" +msgstr "立即解封" + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:56 +msgid "GO" +msgstr "" + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:59 +msgid "Statistics gathered during this router's uptime" +msgstr "路由运行时收集的统计数据" + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:62 +msgid "The data gathered is quantized over a 1 minute period, so should just be used as an estimate." +msgstr "所采集数据量化周期为1分钟,仅供参考。" + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:108 +msgid "frequency" +msgstr "更新频率" + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:142 +msgid "No lifetime events" +msgstr "自运行起无事件" + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:154 +msgid "rate" +msgstr "速度" + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:156 +msgid "avg value" +msgstr "均值" + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:185 +msgid "events" +msgstr "事件" + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:191 +msgid "No events" +msgstr "无事件" + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:197 +msgid "lifetime average" +msgstr "总平均值" + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:199 +msgid "peak average" +msgstr "峰值平均值" + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:217 +msgid "lifetime average value" +msgstr "总平均值" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:44 +msgid "Configure startup of clients and webapps (services); manually start dormant services" +msgstr "设置客户程序及Web程序(服务)的启动;手动启动重要服务" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:46 +msgid "I2P Services" +msgstr "I2P 服务" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:52 +msgid "Manage your I2P hosts file here (I2P domain name resolution)" +msgstr "管理您的 I2P HOST表(I2P域名解析表)" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:54 +msgid "Addressbook" +msgstr "地址簿" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:58 +msgid "Built-in anonymous BitTorrent Client" +msgstr "内建的匿名 BitTorrent 客户端" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:60 +msgid "Torrents" +msgstr "匿名BT" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:64 +msgid "Anonymous webmail client" +msgstr "匿名Web邮件客户端" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:66 +msgid "Webmail" +msgstr "匿名邮箱" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:70 +msgid "Anonymous resident webserver" +msgstr "内置的匿名Web服务器" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:72 +msgid "Webserver" +msgstr "匿名主页服务器" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:76 +msgid "Configure I2P Router" +msgstr "设置 I2P 路由器" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:78 +msgid "I2P Internals" +msgstr "I2P内部设置" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:84 +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:355 +msgid "View existing tunnels and tunnel build status" +msgstr "查看现存隧道及隧道的建立状态" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:90 +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:232 +msgid "Show all current peer connections" +msgstr "显示当前所有的节点连接" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:96 +msgid "Show recent peer performance profiles" +msgstr "显示当前节点的性能记录" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:98 +msgid "Profiles" +msgstr "节点信息" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:102 +msgid "Show list of all known I2P routers" +msgstr "包含所有已知I2P路由器的列表" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:104 +msgid "NetDB" +msgstr "NetDB" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:108 +msgid "Health Report" +msgstr "路由器健康状况报告" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:110 +msgid "Logs" +msgstr "日志" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:114 +msgid "Show the router's workload, and how it's performing" +msgstr "显示I2P路由器的负载与工作状况" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:116 +msgid "Jobs" +msgstr "作业" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:120 +msgid "Graph router performance" +msgstr "路由性能统计图" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:122 +msgid "Graphs" +msgstr "图表" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:126 +msgid "Textual router performance statistics" +msgstr "路由性能文字统计" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:132 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:370 +msgid "Local Destinations" +msgstr "本地目标" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:134 +#: ../java/strings/Strings.java:62 +msgid "I2PTunnel" +msgstr "I2P隧道" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:145 +msgid "I2P Router Help" +msgstr "I2P路由帮助" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:147 +msgid "General" +msgstr "功能概况" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:150 +msgid "Your unique I2P router identity is" +msgstr "您I2P路由的唯一身份为" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:154 +msgid "never reveal it to anyone" +msgstr "切勿将其告诉任何人" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:156 +msgid "Local Identity" +msgstr "本地身份" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:168 +msgid "How long we've been running for this session" +msgstr "本次路由运行时间" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:171 +msgid "Uptime" +msgstr "运行时间" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:178 +msgid "Help with configuring your firewall and router for optimal I2P performance" +msgstr "如何正确配置防火墙和(物理)路由器优化I2P性能" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:205 +msgid "Download" +msgstr "下载" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:214 +msgid "Download Unsigned" +msgstr "下载未签名更新" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:240 +msgid "Active" +msgstr "活动节点" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:248 +msgid "Fast" +msgstr "快速节点" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:254 +msgid "High capacity" +msgstr "高容量节点" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:266 +msgid "Known" +msgstr "已知节点" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:281 +msgid "Help with firewall configuration" +msgstr "如何配置防火墙" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:283 +msgid "Check NAT/firewall" +msgstr "检查NAT/防火墙" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:303 +msgid "Reseed" +msgstr "补种(搜索节点启动网络)" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:320 +msgid "Configure router bandwidth allocation" +msgstr "设置路由的带宽分配" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:322 +msgid "Bandwidth in/out" +msgstr "带宽(上/下行)" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:339 +msgid "Total" +msgstr "总计" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:347 +msgid "Used" +msgstr "已使用" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:357 +msgid "Tunnels in/out" +msgstr "通道(上/下行)" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:362 +msgid "Exploratory" +msgstr "探测" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:378 +msgid "Participating" +msgstr "共享" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:384 +msgid "Share ratio" +msgstr "共享/占用" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:390 +msgid "What's in the router's job queue?" +msgstr "查看路由的作业队列" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:392 +msgid "Congestion" +msgstr "拥堵" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:397 +msgid "Job lag" +msgstr "作业延迟" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:403 +msgid "Message delay" +msgstr "消息延迟" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:409 +msgid "Tunnel lag" +msgstr "隧道延迟" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:415 +msgid "Backlog" +msgstr "积压" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:96 +msgid "ERR-Client Manager I2CP Error - check logs" +msgstr "错误-客户程序管理器I2CP错误 - 请看日志" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:103 +#, java-format +msgid "ERR-Clock Skew of {0}" +msgstr "错误-系统时滞 {0}" + +# 暂不翻译,确定/良好 可能影响按钮的翻译 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:112 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:565 +msgid "OK" +msgstr "正常" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:113 +msgid "ERR-Private TCP Address" +msgstr "错误-TCP私有地址" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:115 +msgid "ERR-SymmetricNAT" +msgstr "错误-SymmeticNAT" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:118 +msgid "WARN-Firewalled with Inbound TCP Enabled" +msgstr "警告-入站TCP开启但因防火墙受限" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:120 +msgid "WARN-Firewalled and Floodfill" +msgstr "警告-种子节点因防火墙受限" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:122 +msgid "WARN-Firewalled and Fast" +msgstr "警告-快速节点因防火墙受限" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:123 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:569 +msgid "Firewalled" +msgstr "防火墙限制" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:125 +msgid "ERR-UDP Port In Use - Set i2np.udp.internalPort=xxxx in advanced config and restart" +msgstr "错误-UDP端口已占用 - 在高级设置中设置 i2np.udp.internalPort=新端口并重启程序" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:131 +msgid "ERR-No Active Peers, Check Network Connection and Firewall" +msgstr "错误-无活动节点,请检查网络连接及防火墙" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:134 +msgid "ERR-UDP Disabled and Inbound TCP host/port not set" +msgstr "错误-UDP已禁用且TCP入站主机与端口未设置" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:136 +msgid "WARN-Firewalled with UDP Disabled" +msgstr "警告-因防火墙受限且UDP被禁用" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:138 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:585 +msgid "Testing" +msgstr "测试中" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:370 +msgid "Add/remove/edit & control your client and server tunnels" +msgstr "添加、删除、编辑或控制客户程序隧道和服务隧道" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:382 +msgid "Server" +msgstr "服务" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:386 +msgid "Show tunnels" +msgstr "显示隧道" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:397 +msgid "Leases expired" +msgstr "Lease已过期" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:397 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:398 +msgid "Rebuilding" +msgstr "正在重建" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:398 +msgid "ago" +msgstr "前" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:401 +msgid "Ready" +msgstr "就绪" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:405 +msgid "Building" +msgstr "创建中" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:405 +msgid "Building tunnels" +msgstr "正在隧道创建" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:410 +msgid "none" +msgstr "无" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:421 +#: ../java/strings/Strings.java:36 +msgid "shared clients" +msgstr "共享客户端" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:41 +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:63 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:273 +msgid "configure" +msgstr "设置" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:65 +msgid "dead" +msgstr "失效" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:71 +msgid "Participating tunnels" +msgstr "共享隧道" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:72 +msgid "From" +msgstr "从" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:72 +msgid "Receive on" +msgstr "接收" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:73 +msgid "Expiration" +msgstr "到期" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:73 +msgid "Send on" +msgstr "发送" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:73 +msgid "To" +msgstr "至" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:74 +msgid "Rate" +msgstr "速度" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:74 +msgid "Role" +msgstr "职能" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:74 +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:156 +msgid "Usage" +msgstr "使用情况" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:107 +msgid "grace period" +msgstr "过渡期" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:117 +msgid "Outbound Endpoint" +msgstr "出站终端" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:119 +msgid "Inbound Gateway" +msgstr "入站网关" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:121 +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:162 +msgid "Participant" +msgstr "参与节点" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:126 +msgid "Inactive participating tunnels" +msgstr "不活跃的共享隧道" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:127 +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:216 +msgid "Lifetime bandwidth usage" +msgstr "运行期间带宽使用情况" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:156 +msgid "Expiry" +msgstr "到期" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:156 +msgid "In/Out" +msgstr "入/出" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:159 +msgid "Participants" +msgstr "参与节点" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:165 +msgid "Endpoint" +msgstr "终端" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:205 +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:211 +msgid "Build in progress" +msgstr "创建中" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:205 +msgid "inbound" +msgstr "入站" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:211 +msgid "outbound" +msgstr "出站" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:215 +msgid "No tunnels; waiting for the grace period to end." +msgstr "无隧道;等待宽限期结束。" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:216 +msgid "in" +msgstr "入" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:217 +msgid "out" +msgstr "出" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:234 +msgid "Tunnel Counts By Peer" +msgstr "每节点隧道计数" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:235 +msgid "% of total" +msgstr "占总数%" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:235 +msgid "Our Tunnels" +msgstr "我方隧道" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:235 +msgid "Participating Tunnels" +msgstr "共享隧道" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:253 +msgid "Totals" +msgstr "总计" + +#: ../java/strings/Strings.java:12 +msgid "addressbook" +msgstr "地址簿" + +#: ../java/strings/Strings.java:13 +msgid "i2psnark" +msgstr "匿名BT客户端" + +#: ../java/strings/Strings.java:14 +msgid "i2ptunnel" +msgstr "I2P隧道" + +#: ../java/strings/Strings.java:15 +msgid "susimail" +msgstr "匿名邮箱" + +#: ../java/strings/Strings.java:16 +msgid "susidns" +msgstr "susiDNS" + +#: ../java/strings/Strings.java:17 +msgid "routerconsole" +msgstr "路由控制台" + +#: ../java/strings/Strings.java:22 +msgid "Web console" +msgstr "网页控制台" + +#: ../java/strings/Strings.java:23 +msgid "SAM application bridge" +msgstr "SAM 协议桥" + +#: ../java/strings/Strings.java:24 +msgid "Application tunnels" +msgstr "程序隧道" + +#: ../java/strings/Strings.java:25 +msgid "My eepsite web server" +msgstr "匿名主页服务器" + +#: ../java/strings/Strings.java:26 +msgid "I2P webserver (eepsite)" +msgstr "匿名主页服务器(eepsite)" + +#: ../java/strings/Strings.java:27 +msgid "Browser launch at startup" +msgstr "路由器启动时运行浏览器" + +#: ../java/strings/Strings.java:28 +msgid "BOB application bridge" +msgstr "BOB 协议桥" + +#: ../java/strings/Strings.java:30 +msgid "Open Router Console in web browser at startup" +msgstr "路由启动时打开控制台" + +#: ../java/strings/Strings.java:37 +msgid "IRC proxy" +msgstr "I2P聊天室" + +#: ../java/strings/Strings.java:38 +msgid "eepsite" +msgstr "匿名网站" + +#: ../java/strings/Strings.java:39 +msgid "I2P webserver" +msgstr "匿名主页服务器" + +#: ../java/strings/Strings.java:40 +msgid "HTTP Proxy" +msgstr "HTTP 代理" + +#: ../java/strings/Strings.java:42 +msgid "eepProxy" +msgstr "I2P代理" + +#: ../java/strings/Strings.java:43 +msgid "ircProxy" +msgstr "I2P聊天室" + +#: ../java/strings/Strings.java:45 +msgid "I2PSnark" +msgstr "I2P Snark" + +#: ../java/strings/Strings.java:47 +msgid "iMule" +msgstr "" + +#: ../java/strings/Strings.java:51 +msgid "classic" +msgstr "经典" + +#: ../java/strings/Strings.java:52 +msgid "dark" +msgstr "暗色调" + +#: ../java/strings/Strings.java:53 +msgid "light" +msgstr "亮色调" + +#: ../java/strings/Strings.java:54 +msgid "midnight" +msgstr "午夜" + +#: ../java/strings/Strings.java:57 +msgid "Bandwidth" +msgstr "带宽" + +#: ../java/strings/Strings.java:58 +msgid "BandwidthLimiter" +msgstr "带宽限制" + +#: ../java/strings/Strings.java:59 +msgid "ClientMessages" +msgstr "客户消息" + +#: ../java/strings/Strings.java:60 +msgid "Encryption" +msgstr "加密" + +#: ../java/strings/Strings.java:61 +msgid "i2cp" +msgstr "" + +#: ../java/strings/Strings.java:63 +msgid "InNetPool" +msgstr "" + +#: ../java/strings/Strings.java:64 +msgid "JobQueue" +msgstr "作业队列" + +#: ../java/strings/Strings.java:65 +msgid "NetworkDatabase" +msgstr "网络数据库" + +#: ../java/strings/Strings.java:66 +msgid "ntcp" +msgstr "NTCP" + +#: ../java/strings/Strings.java:69 +msgid "Stream" +msgstr "流" + +#: ../java/strings/Strings.java:70 +msgid "Throttle" +msgstr "门槛" + +#: ../java/strings/Strings.java:71 +msgid "Transport" +msgstr "传输" + +#: ../java/strings/Strings.java:73 +msgid "udp" +msgstr "UDP" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:106 +msgid "config networking" +msgstr "连网设置" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:217 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:218 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:217 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:217 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:231 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:217 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:217 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:218 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:217 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:217 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:217 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/debug_jsp.java:220 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:228 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/graphs_jsp.java:217 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005fru_jsp.java:220 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_jsp.java:220 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/index_jsp.java:223 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/jobs_jsp.java:216 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:216 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/netdb_jsp.java:216 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/nowebapp_jsp.java:220 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/oldconsole_jsp.java:220 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/peers_jsp.java:216 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/profiles_jsp.java:216 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/stats_jsp.java:216 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/summaryframe_jsp.java:235 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/tunnels_jsp.java:216 +msgid "Refresh (s)" +msgstr "刷新(秒)" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:221 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:222 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:221 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:221 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:235 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:221 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:221 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:222 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:221 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:221 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:221 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/debug_jsp.java:224 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:232 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/graphs_jsp.java:221 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005fru_jsp.java:224 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_jsp.java:224 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/index_jsp.java:227 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/jobs_jsp.java:220 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:220 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/netdb_jsp.java:220 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/nowebapp_jsp.java:224 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/oldconsole_jsp.java:224 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/peers_jsp.java:220 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/profiles_jsp.java:220 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/stats_jsp.java:220 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/summaryframe_jsp.java:238 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/tunnels_jsp.java:220 +msgid "Enable" +msgstr "启用" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:241 +msgid "I2P Network Configuration" +msgstr "I2P 连网设置" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:297 +msgid "Bandwidth limiter" +msgstr "带宽限制" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:299 +msgid "I2P will work best if you configure your rates to match the speed of your internet connection." +msgstr "与联网环境相符的速度能使I2P以最佳的状态工作。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:303 +msgid "KBps In" +msgstr "KBps 入站" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:317 +msgid "KBps Out" +msgstr "KBps 出站" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:333 +msgid "Share" +msgstr "共享" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:340 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:307 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:303 +msgid "NOTE" +msgstr "注意" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:342 +#, java-format +msgid "You have configured I2P to share only {0} KBps." +msgstr "您设置I2P仅共享 {0} KBps" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:345 +msgid "I2P requires at least 12KBps to enable sharing. " +msgstr "I2P 需要至少 12KBps 才能进行共享。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:346 +msgid "Please enable sharing (participating in tunnels) by configuring more bandwidth. " +msgstr "请设置更多的带宽以便启用共享功能(加入到其他节点的隧道创建中)。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:347 +msgid "It improves your anonymity by creating cover traffic, and helps the network." +msgstr "通过制造混淆流量共享能增强您的匿名性,帮助网络成长。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:350 +#, java-format +msgid "You have configured I2P to share {0} KBps." +msgstr "您设置I2P共享 {0} KBps" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:353 +msgid "The higher the share bandwidth the more you improve your anonymity and help the network." +msgstr "共享的带宽越多,您的匿名性越强同时能帮助网络成长。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:359 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:504 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:305 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:324 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:324 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:335 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:375 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:343 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:323 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:356 +msgid "Cancel" +msgstr "取消" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:363 +msgid "IP and Transport Configuration" +msgstr "IP 与传输设置" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:365 +msgid "The default settings will work for most people." +msgstr "默认设置适于大多数人。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:367 +msgid "There is help below." +msgstr "页面下方有帮助信息" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:369 +msgid "UPnP Configuration" +msgstr "UPnP 设置" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:373 +msgid "Enable UPnP to open firewall ports" +msgstr "启用UPnP以打开防火墙端口" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:375 +msgid "UPnP status" +msgstr "UPnP 统计" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:377 +msgid "IP Configuration" +msgstr "IP 设置" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:379 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:449 +msgid "Externally reachable hostname or IP address" +msgstr "公网可访问的本机域名或IP" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:383 +msgid "Use all auto-detect methods" +msgstr "使用全部自动探测方法" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:387 +msgid "Disable UPnP IP address detection" +msgstr "禁用UPnP IP 地址探测" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:391 +msgid "Ignore local interface IP address" +msgstr "忽略本地接口的 IP 地址" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:395 +msgid "Use SSU IP address detection only" +msgstr "仅使用SSU IP 地址探测" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:399 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:467 +msgid "Specify hostname or IP" +msgstr "指定主机名或IP" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:405 +msgid "Select Interface" +msgstr "选择网络接口" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:419 +msgid "Hidden mode - do not publish IP" +msgstr "隐身模式 - 不发布IP" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:421 +msgid "(prevents participating traffic)" +msgstr "(阻止共享流量)" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:423 +msgid "Action when IP changes" +msgstr "IP改变后应" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:427 +msgid "Laptop mode - Change router identity and UDP port when IP changes for enhanced anonymity" +msgstr "笔记本模式 - IP变化后改变路由身份及UDP端口(拨号用户慎用)" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:429 +msgid "Experimental" +msgstr "试验性" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:431 +msgid "UDP Configuration:" +msgstr "UPnP 设置:" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:433 +msgid "UDP port:" +msgstr "UDP端口" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:447 +msgid "TCP Configuration" +msgstr "TCP 连接设置" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:453 +msgid "Use auto-detected IP address" +msgstr "使用自动检测得到的 IP 地址" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:455 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:487 +msgid "currently" +msgstr "目前" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:459 +msgid "if we are not firewalled" +msgstr "如果没有受到防火墙阻挡" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:463 +msgid "Always use auto-detected IP address (Not firewalled)" +msgstr "总是使用自动探测到的IP地址(没有防火墙限制)" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:473 +msgid "Disable inbound (Firewalled)" +msgstr "禁止入站连接(受防火墙限制)" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:477 +msgid "Completely disable" +msgstr "完全禁用" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:479 +msgid "(select only if behind a firewall that throttles or blocks outbound TCP)" +msgstr "仅在受到防火墙的流量限制或入站连接限制时使用" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:481 +msgid "Externally reachable TCP port" +msgstr "公网可访问的TCP端口" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:485 +msgid "Use the same port configured for UDP" +msgstr "使用与UDP相同的端口" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:493 +msgid "Specify Port" +msgstr "指定端口" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:497 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:338 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:329 +msgid "Note" +msgstr "注意" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:500 +msgid "Changing these settings will restart your router." +msgstr "修改这些设置将必须重启路由器。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:506 +msgid "Configuration Help" +msgstr "设置帮助" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:508 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:557 +msgid "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." +msgstr "I2P可以与大多数防火墙共存,如果I2P端口(第一次安装时随机选择)进行了UDP/TCP映射,您的速度和网络整合度会逐渐提升。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:510 +msgid "If you can, please poke a hole in your firewall to allow unsolicited UDP and TCP packets to reach you." +msgstr "如果可能,请在防火墙中添加端口并允许入站UDP/TCP数据包通过。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:512 +msgid "If you can't, I2P supports UPnP (Universal Plug and Play) and UDP hole punching with \"SSU introductions\" to relay traffic." +msgstr "如果不能,I2P支持UPnP(Universal Plug and Play)或借助“SSU中介”进行UDP端口穿透,通过它们也可以中继数据。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:514 +msgid "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." +msgstr "上述大部分设置仅为特殊情况准备,例如UPnP不能正常工作,或外部防火墙封锁网络。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:516 +msgid "Certain firewalls such as symmetric NATs may not work well with I2P." +msgstr "在某些防火墙下例如Symmetric,I2P可能无法有效利用NAT工作。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:525 +msgid "UPnP is used to communicate with Internet Gateway Devices (IGDs) to detect the external IP address and forward ports." +msgstr "UPnP与公网网关设备(IGD)通讯可以检测外部IP和映射端口。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:527 +msgid "UPnP support is beta, and may not work for any number of reasons" +msgstr "UPnP支持仍在测试阶段,可能由于一些原因无法正常工作。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:529 +msgid "No UPnP-compatible device present" +msgstr "没有发现UPnP兼容设备" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:531 +msgid "UPnP disabled on the device" +msgstr "设备上的UPnP支持已禁用" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:533 +msgid "Software firewall interference with UPnP" +msgstr "软件防火墙阻止UPnP" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:535 +msgid "Bugs in the device's UPnP implementation" +msgstr "设备的UPnP支持有Bug" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:537 +msgid "Multiple firewall/routers in the internet connection path" +msgstr "公网连接中存在多个防火墙/路由器" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:539 +msgid "UPnP device change, reset, or address change" +msgstr "UPnP设备改变、重置或地址迁移" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:541 +msgid "Review the UPnP status here." +msgstr "在这里检查UPnP状态。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:543 +msgid "UPnP may be enabled or disabled above, but a change requires a router restart to take effect." +msgstr "UPnP 的关闭或开启均需要程序重启后生效。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:545 +msgid "Hostnames entered above will be published in the network database." +msgstr "上面输入的主机名称将在网络数据库(NetDB)中发布。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:547 +msgid "They are not private." +msgstr "他们并非私有地址。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:549 +msgid "Also, do not enter a private IP address like 127.0.0.1 or 192.168.1.1." +msgstr "此外,请勿输入如127.0.0.1或192.168.1.1等私有地址" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:551 +msgid "If you specify the wrong IP address or hostname, or do not properly configure your NAT or firewall, your network performance will degrade substantially." +msgstr "如果您设置了错误的IP地址或主机名称,或NAT/防火墙配置不当,您的网络性能将受到明显影响。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:553 +msgid "When in doubt, leave the settings at the defaults." +msgstr "如果对设置有疑问,请保留默认设置。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:555 +msgid "Reachability Help" +msgstr "连通性帮助" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:560 +msgid "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." +msgstr "如果您认为已经打开了防火墙,但I2P仍然报告您受到防火墙阻隔,请想想您是否可能有多层防火墙,例如软件防护墙和外部的硬件路由器。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:563 +msgid "If there is an error, the logs may also help diagnose the problem." +msgstr "如果存在错误,日志可以帮助您诊断问题。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:567 +msgid "Your UDP port does not appear to be firewalled." +msgstr "您的UDP端口似乎一切正常。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:571 +msgid "Your UDP port appears to be firewalled." +msgstr "您的UDP端口似乎因防火墙而连接受限。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:573 +msgid "As the firewall detection methods are not 100% reliable, this may occasionally be displayed in error." +msgstr "由于防火墙检测方法并非100%可靠,有时也可能错误地显示此此提示。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:575 +msgid "However, if it appears consistently, you should check whether both your external and internal firewalls are open for your port." +msgstr "然而,如果总是出现此提示,您应检查外部或内部防火墙是否打开了I2P端口。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:577 +msgid "I2P will work fine when firewalled, there is no reason for concern. When firewalled, the router uses \"introducers\" to relay inbound connections." +msgstr "即使受到防火墙阻拦,I2P也能够正常工作,无需担心。受到防火墙阻隔时,路由器将通过“中介(Introducers)”中继入站连接。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:579 +msgid "However, you will get more participating traffic and help the network more if you can open your firewall(s)." +msgstr "然而,如果您能打开防火墙端口,您才能得到的共享流量,更好的帮助I2P网络。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:581 +msgid "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." +msgstr "如果您确信已经打开了防火墙,请想想是不是同时存在硬件和软件防火墙,或存在您无法控制的额外的机构性的防火墙。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:583 +msgid "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." +msgstr "当然,某些路由器可能无法正确映射同时使用TCP和UDP协议的端口,或存在其他限制或缺陷,障碍了数据进入I2P网络。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:587 +msgid "The router is currently testing whether your UDP port is firewalled." +msgstr "路由器正在测试您的UDP端口是否被防火墙阻挡。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:591 +msgid "The router is not configured to publish its address, therefore it does not expect incoming connections." +msgstr "路由器被设置为禁止发布IP地址,因此并不需要入站连接。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:593 +msgid "WARN - Firewalled and Fast" +msgstr "警告 - 快速节点,因防火墙受限" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:595 +msgid "You have configured I2P to share more than 128KBps of bandwidth, but you are firewalled." +msgstr "您设置I2P共享超过128KBps的带宽,但您的连接因防火墙受阻。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:597 +msgid "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." +msgstr "尽管在此种配置情况下I2P可以正常工作,但如果您的确能够分享超过128kps的带宽,打开防火墙端口它能工作的更好帮助网络中其他的人。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:599 +msgid "WARN - Firewalled and Floodfill" +msgstr "警告 - 种子节点,因防火墙受限" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:601 +msgid "You have configured I2P to be a floodfill router, but you are firewalled." +msgstr "您已将I2P设置为种子路由,但您的连接已因防火墙受阻。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:603 +msgid "For best participation as a floodfill router, you should open your firewall." +msgstr "为了种子路由能够更好的参与到I2P网络中,请您的防火墙中打开端口。" + +# 暂不翻译方便反馈 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:605 +msgid "WARN - Firewalled with Inbound TCP Enabled" +msgstr "警告 - 入站TCP开启,但因防火墙受限" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:607 +msgid "You have configured inbound TCP, however your UDP port is firewalled, and therefore it is likely that your TCP port is firewalled as well." +msgstr "您设置了使用入站TCP连接,同时您的UDP端口因防火墙受阻,由此看来您的TCP端口也被防火墙阻挡。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:609 +msgid "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." +msgstr "如果您在TCP端口因防火墙受阻的情况下启用入站TCP连接,其他路由器节点将无法与您建立连接,造成网络受阻。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:611 +msgid "Please open your firewall or disable inbound TCP above." +msgstr "请打开您的防火墙端口或禁用上面的入站TCP连接。" + +# 暂不翻译 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:613 +msgid "WARN - Firewalled with UDP Disabled" +msgstr "警告 - 因防火墙受限,且UDP被禁用" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:615 +msgid "You have configured inbound TCP, however you have disabled UDP." +msgstr "您设置了使用TCP连接,然而禁用了UDP连接。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:617 +msgid "You appear to be firewalled on TCP, therefore your router cannot accept inbound connections." +msgstr "您的TCP连接似乎因防火墙受阻,导致您的路由器无法接收入站连接。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:619 +msgid "Please open your firewall or enable UDP." +msgstr "请打开防火墙端口或启用UDP。" + +# 暂不翻译,方便错误反馈 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:621 +msgid "ERR - Clock Skew" +msgstr "错误 - 系统时滞" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:623 +msgid "Your system's clock is skewed, which will make it difficult to participate in the network." +msgstr "如果您的系统时钟太快或太慢,将影响计算机接入网络。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:625 +msgid "Correct your clock setting if this error persists." +msgstr "如果错误持续,请校对您的系统时间。" + +# 暂不翻译,方便错误反馈 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:627 +msgid "ERR - Private TCP Address" +msgstr "错误 - 私有TCP地址" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:629 +msgid "You must never advertise an unroutable IP address such as 127.0.0.1 or 192.168.1.1 as your external address." +msgstr "您不能发布一个公网无法访问的 IP 地址,例如127.0.0.1或192.168.1.1一类的内网地址。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:631 +msgid "Correct the address or disable inbound TCP above." +msgstr "正确设置IP地址或禁用上面的入站TCP连接。" + +# 暂不翻译,方便错误反馈 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:633 +msgid "ERR - SymmetricNAT" +msgstr "错误 - SymmetricNAT" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:635 +msgid "I2P detected that you are firewalled by a Symmetric NAT." +msgstr "I2P检测到您受到Symmetic NAT的阻挡。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:637 +msgid "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." +msgstr "I2P无法与此类防火墙很好的并存。您可能无法接收入站连接,这会障碍您连入I2P网络。" + +# 暂不翻译,方便问题反馈 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:639 +msgid "ERR - UDP Port In Use - Set i2np.udp.internalPort=xxxx in advanced config and restart" +msgstr "错误 - UDP端口已占用 - 在高级设置中设置 i2np.udp.internalPort=新端口 并重启程序" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:641 +msgid "I2P was unable to bind to port 8887 or other configured port." +msgstr "I2P无法绑定到端口8887或其他指定的端口上。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:643 +msgid "Check to see if another program is using the configured port. If so, stop that program or configure I2P to use a different port." +msgstr "检查是否有其他程序正在使用了I2P的端口,如果是,关闭此程序或设置I2P使用不同的端口。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:645 +msgid "This may be a transient error, if the other program is no longer using the port." +msgstr "如果其他程序不再使用此端口,这可能是临时性的错误。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:647 +msgid "However, a restart is always required after this error." +msgstr "然而,发生此错误后一般需要重启程序才能解决。" + +# 暂不翻译,方便错误反馈 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:649 +msgid "ERR - UDP Disabled and Inbound TCP host/port not set" +msgstr "错误 - UDP已禁用,且TCP入站主机与端口未设置" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:651 +msgid "You have not configured inbound TCP with a hostname and port above, however you have disabled UDP." +msgstr "您没有设置入站TCP的主机名称和端口,同时又关闭了UDP。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:653 +msgid "Therefore your router cannot accept inbound connections." +msgstr "因此您的路由器无法接收入站连接。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:655 +msgid "Please configure a TCP host and port above or enable UDP." +msgstr "请在前面设置TCP主机和端口或启用UDP" + +# 错误提示暂不翻译,以便错误反馈。 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:657 +msgid "ERR - Client Manager I2CP Error - check logs" +msgstr "错误 - 客户程序管理器 I2CP 错误 - 请看日志" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:659 +msgid "This is usually due to a port 7654 conflict. Check the logs to verify." +msgstr "这通常为7654端口冲突所致,请查看日志确认原因。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:661 +msgid "Do you have another I2P instance running? Stop the conflicting program and restart I2P." +msgstr "您是否已经运行了另一个I2P实例?请关掉冲突的程序并重启I2P。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:107 +msgid "config advanced" +msgstr "高级设置" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:242 +msgid "I2P Advanced Configuration" +msgstr "I2P 高级设置" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:299 +msgid "Advanced I2P Configuration" +msgstr "I2P 高级设置" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:303 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:321 +msgid "Apply" +msgstr "应用" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:309 +msgid "Some changes may require a restart to take effect." +msgstr "某些设置需要程序重启后生效。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:106 +msgid "config clients" +msgstr "升级设置" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:244 +msgid "I2P Client Configuration" +msgstr "I2P 客户程序设置" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:309 +msgid "Client Configuration" +msgstr "客户程序设置" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:311 +msgid "The Java clients listed below are started by the router and run in the same JVM." +msgstr "下面列出的Java客户端随路由器启动并运行于同一JVM中。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:315 +msgid "To change other client options, edit the file" +msgstr "修改其他客户端设置请编辑文件" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:322 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:342 +msgid "All changes require restart to take effect." +msgstr "所有更改均需要程序重启才能生效。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:334 +msgid "WebApp Configuration" +msgstr "WebApp 设置" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:336 +msgid "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)." +msgstr "下面列出的Java Web 程序随客户端“web控制台”一同启动,并与路由运行于同一JVM中。这些Web程序通常可以通过路由器界面直接访问。他们可能是完整的程序 (例如 i2psnark/BT客户端),其他客户端程序的前端或必须单独启动的程序(例如. susidns, i2ptunnel),甚至根本没有Web界面(例如 addressbook)。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:338 +msgid "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." +msgstr "从webapps目录中删除相应的.war文件同样可以禁用Web程序;然而这些 .war 文件和Web程序在更新I2P后还会再次出现,所以推荐在这里通过设置的方法禁用不用的Web程序。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:106 +msgid "config keyring" +msgstr "钥匙环设置" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:228 +msgid "I2P Keyring Configuration" +msgstr "I2P 钥匙环设置" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:294 +msgid "The router keyring is used to decrypt encrypted leaseSets." +msgstr "路由的钥匙环被用来解密和加密赁集." + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:297 +msgid "The keyring may contain keys for local or remote encrypted destinations." +msgstr "钥匙环可以包含本地和远程的加密目标(Destination)." + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:307 +msgid "Manual Keyring Addition" +msgstr "手动添加钥匙环" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:309 +msgid "Enter keys for encrypted remote destinations here." +msgstr "在此处添加远程加密目标的密钥。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:312 +msgid "Keys for local destinations must be entered on the" +msgstr "输入本地目标的密钥请到" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:314 +msgid "I2PTunnel page" +msgstr "I2P 隧道页面" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:316 +msgid "Dest. name, hash, or full key" +msgstr "目标(Dest.)名称, HASH, 或完整公钥" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:318 +msgid "Encryption Key" +msgstr "加密密钥" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:107 +msgid "config logging" +msgstr "日志设置" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:242 +msgid "I2P Logging Configuration" +msgstr "I2P 记录设置" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:299 +msgid "Configure I2P Logging Options" +msgstr "设置 I2P 记录选项" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:301 +msgid "Logging filename" +msgstr "日志文件名称" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:305 +msgid "(the symbol '@' will be replaced during log rotation)" +msgstr "(日志轮转时符号'@'将被替换)" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:307 +msgid "Log record format" +msgstr "日志记录格式" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:311 +msgid "(use 'd' = date, 'c' = class, 't' = thread, 'p' = priority, 'm' = message)" +msgstr "( 'd' = 日期, 'c' = 类, 't' = 线程, 'p' = 优先级, 'm' = 消息)" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:313 +msgid "Log date format" +msgstr "日志日期格式" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:317 +msgid "('MM' = month, 'dd' = day, 'HH' = hour, 'mm' = minute, 'ss' = second, 'SSS' = millisecond)" +msgstr "('MM' = 月, 'dd' = 天, 'HH' = 小时, 'mm' = 分钟, 'ss' = 秒, 'SSS' = 毫秒)" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:319 +msgid "Max log file size" +msgstr "日志最大体积" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:323 +msgid "Default log level" +msgstr "默认日志等级" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:327 +msgid "(DEBUG and INFO are not recommended defaults, as they will drastically slow down your router)" +msgstr "(建议不要使用 DEBUG 或 INFO 作为默认等级,他们会明显降低程序性能)" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:329 +msgid "Log level overrides" +msgstr "等级外
      日志项目" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:106 +msgid "config peers" +msgstr "节点设置" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:228 +msgid "I2P Peer Configuration" +msgstr "I2P 节点设置" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:304 +msgid "Manual Peer Controls" +msgstr "手动节点控制" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:306 +msgid "Router Hash" +msgstr "路由器Key(见NetDB)" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:310 +msgid "Manually Ban / Unban a Peer" +msgstr "手动封杀/解封某个节点" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:312 +msgid "Banning will prevent the participation of this peer in tunnels you create." +msgstr "封锁将阻止节点参与您的隧道创建" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:324 +msgid "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" +msgstr "评分(Bonuse)可能为正或为负并影响节点是否评为快速和高容量节点。快速节点用于客户程序通道,高容量节点用于探索隧道。当前评分显示于" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:326 +msgid "profiles page" +msgstr "节点信息页面" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:342 +msgid "Adjust peer bonuses" +msgstr "调整节点评分" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:344 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/profiles_jsp.java:253 +msgid "Banned Peers" +msgstr "已封锁节点" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:366 +msgid "Banned IPs" +msgstr "已封锁IP" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:106 +msgid "config service" +msgstr "服务设置" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:228 +msgid "I2P Service Configuration" +msgstr "I2P 服务设置" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:284 +msgid "Shutdown the router" +msgstr "关闭路由器" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:286 +msgid "Graceful shutdown lets the router satisfy the agreements it has already made before shutting down, but may take a few minutes." +msgstr "平滑关闭让路由器在关闭前完成已达成的任务,但这可能需要花费几分钟的时间。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:288 +msgid "If you need to kill the router immediately, that option is available as well." +msgstr "当然你也可以选择立即关闭路由。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:298 +msgid "If you want the router to restart itself after shutting down, you can choose one of the following." +msgstr "如果你想要路由器关闭后自动重新启动,可以选择下面的选项。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:300 +msgid "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." +msgstr "此功能在如下情况下适用 - 例如当您修改了某些只在启动时读取的设置,例如路由器控制台密码,路由监听接口等。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:302 +msgid "A graceful restart will take a few minutes (but your peers will appreciate your patience), while a hard restart does so immediately." +msgstr "平滑重启可能会等待几分钟的时间(但你的节点一定会感激你的耐心),硬重启可以立即完成。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:304 +msgid "After tearing down the router, it will wait 1 minute before starting back up again." +msgstr "路由关闭后将等待1分钟再重新启动。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:314 +msgid "Systray integration" +msgstr "使用系统托盘" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:316 +msgid "On the windows platform, there is a small application to sit in the system tray, allowing you to view the router's status" +msgstr "Windows 平台允许小程序进驻系统托盘,让你可以查看路由状态" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:318 +msgid "(later on, I2P client applications will be able to integrate their own functionality into the system tray as well)." +msgstr "(以后的 I2P 客户端程序也会将它们的功能集成到系统托盘里)。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:320 +msgid "If you are on windows, you can either enable or disable that icon here." +msgstr "如果你使用Windows, 可以在这里开启或关闭这个托盘图标。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:326 +msgid "Run on startup" +msgstr "启动时运行" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:328 +msgid "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." +msgstr "这里你可以通过下面的选项来设置开机后 I2P 是否启动 - I2P 将相应的安装或卸载I2P服务。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:330 +msgid "If you prefer the command line, you can also run the " +msgstr "如果你偏好使用命令行,可以运行" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:340 +msgid "If you are running I2P as service right now, removing it will shut down your router immediately." +msgstr "如果您目前已经以服务形式运行 I2P ,删除 I2P 服务将立刻关闭路由器。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:342 +msgid "You may want to consider shutting down gracefully, as above, then running uninstall_i2p_service_winnt.bat." +msgstr "您可以考虑先平滑关闭路由,待退出后运行 uninstall_i2p_service_winnt.bat。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:350 +msgid "Debugging" +msgstr "调试" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:352 +msgid "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 wrapper.log." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:358 +msgid "Launch browser on router startup?" +msgstr "路由器启动时运行浏览器?" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:360 +msgid "I2P's main configuration interface is this web console, so for your convenience I2P can launch a web browser on startup pointing at" +msgstr "此Web控制台是I2P的主要设置界面,所以如果您您觉得有必要I2P可以在路由启动时调用浏览器打开" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:107 +msgid "config stats" +msgstr "统计设置" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:229 +msgid "I2P Stats Configuration" +msgstr "I2P 统计设置" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:300 +msgid "Configure I2P Stat Collection" +msgstr "设置 I2P 统计项" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:302 +msgid "Enable full stats?" +msgstr "启用完整统计?" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:309 +msgid "change requires restart to take effect" +msgstr "设置需要程序重启后才能生效。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:311 +msgid "Stat file" +msgstr "统计文件" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:315 +msgid "Filter" +msgstr "过滤器" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:317 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:326 +msgid "toggle all" +msgstr "全部切换" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:328 +msgid "Log" +msgstr "日志" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:330 +msgid "Graph" +msgstr "图表" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:369 +msgid "Advanced filter" +msgstr "高级过滤器" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:106 +msgid "config tunnels" +msgstr "隧道设置" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:241 +msgid "I2P Tunnel Configuration" +msgstr "I2P 隧道设置" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:305 +msgid "The default settings work for most people." +msgstr "默认设置适于大多数人。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:309 +msgid "There is a fundamental tradeoff between anonymity and performance." +msgstr "匿名性需要以性能为代价。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:312 +msgid "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." +msgstr "长于3个跳点的隧道(例如 2跳点 + 0-2跳点,3跳点 + 0-1跳点, 3跳点 + 0-2跳点),或大量常规+大量备用,可能降低性能和稳定性。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:315 +msgid "High CPU and/or high outbound bandwidth usage may result." +msgstr "导致高CPU占用和/或高上行流量。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:318 +msgid "Change these settings with care, and adjust them if you have problems." +msgstr "小心更改这些设置。如果遇到问题可以在这里调整。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:332 +msgid "Exploratory tunnel setting changes are stored in the router.config file." +msgstr "对探测隧道设置的更改将保存入router.config文件中。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:335 +msgid "Client tunnel changes are temporary and are not saved." +msgstr "对客户程序隧道的修改是临时的,将不予保存。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:337 +msgid "To make permanent client tunnel changes see the" +msgstr "要永久性更改客户通道的设置参见" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:339 +msgid "i2ptunnel page" +msgstr "I2P 隧道页面" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:106 +msgid "config UI" +msgstr "界面设置" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:241 +msgid "I2P UI Configuration" +msgstr "I2P 界面设置" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:291 +msgid "Router Console Theme" +msgstr "路由控制台主题" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:309 +msgid "Theme selection disabled for Internet Explorer, sorry." +msgstr "抱歉,主题功能在InternetExplorer中已禁用。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:311 +msgid "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." +msgstr "如果您没使用IE,您的浏览器可能正在伪装IE的UserAgent;您需要设置浏览器(或过滤式代理)使用不同的UserAgent,才能访问路由控制台的主题功能。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:315 +msgid "Router Console Language" +msgstr "路由控制台语言" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:319 +msgid "Please contribute to the router console translation project! Contact the developers on IRC #i2p to help." +msgstr "欢迎加入路由控制台翻译项目!提供帮助请通过IRC到#i2p房间与开发人员联系。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:106 +msgid "config update" +msgstr "升级设置" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:228 +msgid "I2P Update Configuration" +msgstr "I2P 更新设置" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:300 +msgid "Check for I2P and news updates" +msgstr "检查I2P软件及新闻更新" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:302 +msgid "News & I2P Updates" +msgstr "软件及新闻更新" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:306 +msgid "Update In Progress" +msgstr "更新中" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:314 +msgid "News URL" +msgstr "新闻链接" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:318 +msgid "Refresh frequency" +msgstr "更新频率" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:322 +msgid "Update policy" +msgstr "升级策略" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:326 +msgid "Update through the eepProxy?" +msgstr "通过I2P代理更新?" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:330 +msgid "eepProxy host" +msgstr "I2P代理主机" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:334 +msgid "eepProxy port" +msgstr "I2P代理端口" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:338 +msgid "Update URLs" +msgstr "更新链接" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:342 +msgid "Trusted keys" +msgstr "可信公钥" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:346 +msgid "Update with unsigned development builds?" +msgstr "更新包括未签名的开发版?" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:350 +msgid "Unsigned Build URL" +msgstr "未签名软件链接" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:354 +msgid "Save" +msgstr "保存" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:117 +msgid "Page Not Found" +msgstr "页面未找到" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:243 +msgid "Sorry! You appear to be requesting a non-existent Router Console page or resource." +msgstr "抱歉!您请求的页面或资源不存在。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:245 +msgid "Error 404" +msgstr "错误 404" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:250 +msgid "not found" +msgstr "未找到" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/graphs_jsp.java:106 +msgid "graphs" +msgstr "图表" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/graphs_jsp.java:228 +msgid "I2P Performance Graphs" +msgstr "I2P 性能图表" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/index_jsp.java:105 +msgid "home" +msgstr "主页" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/jobs_jsp.java:105 +msgid "job queue" +msgstr "作业队列" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/jobs_jsp.java:227 +msgid "I2P Router Job Queue" +msgstr "I2P 路由器作业队列" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:105 +msgid "logs" +msgstr "日志" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:227 +msgid "I2P Router Logs" +msgstr "I2P 路由器日志" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:229 +msgid "I2P Version & Running Environment" +msgstr "I2P 版本及运行环境" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:231 +msgid "Please include this information in bug reports" +msgstr "报告问题时请包括以下信息" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:267 +msgid "Critical Logs" +msgstr "关键日志" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:271 +msgid "Router Logs" +msgstr "路由器日志" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:277 +msgid "Service (Wrapper) Logs" +msgstr "服务(封装)日志" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/netdb_jsp.java:105 +msgid "network database summary" +msgstr "I2P 网络数据库概况" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/netdb_jsp.java:227 +msgid "I2P Network Database Summary" +msgstr "I2P 网络数据库概况" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/nowebapp_jsp.java:109 +msgid "WebApp Not Found" +msgstr "Web程序(war)未找到" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/nowebapp_jsp.java:231 +msgid "Web Application Not Running" +msgstr "Web程序(.war)未运行" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/nowebapp_jsp.java:233 +msgid "The requested web application is not running." +msgstr "您所访问的Web程序未启动。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/nowebapp_jsp.java:235 +msgid "Please visit the config clients page to start it." +msgstr "请先在配置客户端页面中启动它。" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/peers_jsp.java:105 +msgid "peer connections" +msgstr "节点连接" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/peers_jsp.java:227 +msgid "I2P Network Peers" +msgstr "I2P 网络节点" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/profiles_jsp.java:105 +msgid "peer profiles" +msgstr "节点信息" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/profiles_jsp.java:227 +msgid "I2P Network Peer Profiles" +msgstr "I2P 网络节点信息" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/stats_jsp.java:105 +msgid "statistics" +msgstr "统计" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/stats_jsp.java:242 +msgid "I2P Router Statistics" +msgstr "I2P 路由器统计数据" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/summaryframe_jsp.java:244 +#, java-format +msgid "Disable {0}s Refresh" +msgstr "停止 {0}秒 刷新" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/tunnels_jsp.java:105 +msgid "tunnel summary" +msgstr "隧道概况" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/tunnels_jsp.java:227 +msgid "I2P Tunnel Summary" +msgstr "I2P 隧道概况" + +#~ msgid "This is useful in some situations" +#~ msgstr "重启在某些情况下有用" +#~ msgid "I2P will install (or remove) a service accordingly." +#~ msgstr "I2P将相应的将自身安装为服务(或卸载服务)。" +#~ msgid "skew" +#~ msgstr "时滞" +#~ msgid "Expl. + Client" +#~ msgstr "探测+客户" +#~ msgid "Part. from + to" +#~ msgstr "相邻共享节点" +#~ msgid "Depth" +#~ msgstr "深度" +#~ msgid "Addresses" +#~ msgstr "地址" +#~ msgid "view without" +#~ msgstr "查看不含" +#~ msgid "view with" +#~ msgstr "查看含" +#~ msgid "stats" +#~ msgstr "统计" +#~ msgid "View" +#~ msgstr "查看" +#~ msgid "Not Failing" +#~ msgstr "标准" +#~ msgid "" +#~ "If you want the router to restart itself after shutting down, you can " +#~ "choose one of the following. 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. A graceful restart will take a few minutes (but your peers " +#~ "will appreciate your patience), while a hard restart does so " +#~ "immediately. After tearing down the router, it will wait 1 minute before " +#~ "starting back up again." +#~ msgstr "" +#~ "如果你想要路由器关闭后重新启动,可以选择下面的选项。重启在某些情况下有用 " +#~ "- 例如当修改了客户程序仅在启动时读取的设置比如路由器控制界面的密码,监听的" +#~ "接口。平滑重启可能会等待几分钟的时间 (但其他节点一定会感激你的耐心),硬重" +#~ "启可以立即完成。 路由关闭后将等待1分钟再重新启动。" +#~ msgid "" +#~ "On the windows platform, there is a small application to sit in the " +#~ "system tray, allowing you to view the router's status (later on, I2P " +#~ "client applications will be able to integrate their own functionality " +#~ "into the system tray as well). If you are on windows, you can either " +#~ "enable or disable that icon here." +#~ msgstr "" +#~ "windows 平台允许小程序进驻系统托盘,让你可以查看路由状态,(以后的 I2P 客户" +#~ "端程序也会将它们的功能集成到系统托盘里)。如果你使用Windows, 可以在这里开启" +#~ "或关闭这个托盘图标。" + diff --git a/build.xml b/build.xml index ff1b7ff73..d9f833f9e 100644 --- a/build.xml +++ b/build.xml @@ -197,6 +197,8 @@ + + @@ -237,8 +239,7 @@ - - + - - - - - + + + + - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - @@ -332,19 +288,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - @@ -355,18 +360,21 @@ + - - - - - + + + + + + + @@ -646,7 +654,7 @@ - + @@ -656,15 +664,19 @@ - + - - - - - - + + + + + + + + + + @@ -707,15 +719,18 @@ - + - + + + + - + @@ -728,20 +743,20 @@ - + - + - + - + @@ -752,12 +767,39 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/core/java/src/net/i2p/CoreVersion.java b/core/java/src/net/i2p/CoreVersion.java index db6de4a6e..c569b119f 100644 --- a/core/java/src/net/i2p/CoreVersion.java +++ b/core/java/src/net/i2p/CoreVersion.java @@ -16,7 +16,7 @@ package net.i2p; public class CoreVersion { /** deprecated */ public final static String ID = "Monotone"; - public final static String VERSION = "0.7.8"; + public final static String VERSION = "0.7.10"; public static void main(String args[]) { System.out.println("I2P Core version: " + VERSION); diff --git a/core/java/src/net/i2p/client/HandlerImpl.java b/core/java/src/net/i2p/client/HandlerImpl.java index 57380e44e..98d1e76ff 100644 --- a/core/java/src/net/i2p/client/HandlerImpl.java +++ b/core/java/src/net/i2p/client/HandlerImpl.java @@ -25,10 +25,10 @@ abstract class HandlerImpl implements I2CPMessageHandler { public HandlerImpl(I2PAppContext context, int type) { _context = context; _type = type; - _log = new Log(getClass()); + _log = context.logManager().getLog(getClass()); } public int getType() { return _type; } -} \ No newline at end of file +} diff --git a/core/java/src/net/i2p/client/SetDateMessageHandler.java b/core/java/src/net/i2p/client/SetDateMessageHandler.java index 5e3dfab6b..e828e975c 100644 --- a/core/java/src/net/i2p/client/SetDateMessageHandler.java +++ b/core/java/src/net/i2p/client/SetDateMessageHandler.java @@ -27,7 +27,11 @@ class SetDateMessageHandler extends HandlerImpl { public void handleMessage(I2CPMessage message, I2PSessionImpl session) { _log.debug("Handle message " + message); SetDateMessage msg = (SetDateMessage) message; - Clock.getInstance().setNow(msg.getDate().getTime()); + // Only do this if we are NOT in the router context; + // otherwise, it sets getUpdatedSuccessfully() in Clock when all + // we did was get the time from ourselves. + if (!_context.isRouterContext()) + Clock.getInstance().setNow(msg.getDate().getTime()); session.dateUpdated(); } -} \ No newline at end of file +} diff --git a/core/java/src/net/i2p/client/datagram/I2PDatagramMaker.java b/core/java/src/net/i2p/client/datagram/I2PDatagramMaker.java index 669818ac7..0b3baf5b4 100644 --- a/core/java/src/net/i2p/client/datagram/I2PDatagramMaker.java +++ b/core/java/src/net/i2p/client/datagram/I2PDatagramMaker.java @@ -48,7 +48,18 @@ public final class I2PDatagramMaker { sxPrivKey = session.getPrivateKey(); sxDestBytes = session.getMyDestination().toByteArray(); } + /** + * Construct a new I2PDatagramMaker that is null. + * Use setI2PDatagramMaker to set the parameters. + */ + public I2PDatagramMaker() { + // nop + } + public void setI2PDatagramMaker(I2PSession session) { + sxPrivKey = session.getPrivateKey(); + sxDestBytes = session.getMyDestination().toByteArray(); + } /** * Make a repliable I2P datagram containing the specified payload. * diff --git a/core/java/src/net/i2p/data/Address.java b/core/java/src/net/i2p/data/Address.java index a34f773f3..fb87f988e 100644 --- a/core/java/src/net/i2p/data/Address.java +++ b/core/java/src/net/i2p/data/Address.java @@ -64,16 +64,16 @@ public class Address extends DataStructureImpl { @Override public int hashCode() { - return DataHelper.hashCode(getHostname()) - + DataHelper.hashCode(getDestination()); + return DataHelper.hashCode(_hostname) + + DataHelper.hashCode(_destination); } @Override public String toString() { StringBuilder buf = new StringBuilder(64); buf.append("[Address: "); - buf.append("\n\tHostname: ").append(getHostname()); - buf.append("\n\tDestination: ").append(getDestination()); + buf.append("\n\tHostname: ").append(_hostname); + buf.append("\n\tDestination: ").append(_destination); buf.append("]"); return buf.toString(); } diff --git a/core/java/src/net/i2p/data/Certificate.java b/core/java/src/net/i2p/data/Certificate.java index f20f8322b..9518baab4 100644 --- a/core/java/src/net/i2p/data/Certificate.java +++ b/core/java/src/net/i2p/data/Certificate.java @@ -140,11 +140,11 @@ public class Certificate extends DataStructureImpl { public boolean equals(Object object) { if ((object == null) || !(object instanceof Certificate)) return false; Certificate cert = (Certificate) object; - return getCertificateType() == cert.getCertificateType() && DataHelper.eq(getPayload(), cert.getPayload()); + return _type == cert.getCertificateType() && DataHelper.eq(_payload, cert.getPayload()); } @Override public int hashCode() { - return getCertificateType() + DataHelper.hashCode(getPayload()); + return _type + DataHelper.hashCode(_payload); } @Override public String toString() { diff --git a/core/java/src/net/i2p/data/DataHelper.java b/core/java/src/net/i2p/data/DataHelper.java index 982241581..e84c4a5c3 100644 --- a/core/java/src/net/i2p/data/DataHelper.java +++ b/core/java/src/net/i2p/data/DataHelper.java @@ -48,8 +48,8 @@ import net.i2p.util.ReusableGZIPOutputStream; * @author jrandom */ public class DataHelper { - private final static byte _equalBytes[] = "=".getBytes(); // in UTF-8 - private final static byte _semicolonBytes[] = ";".getBytes(); // in UTF-8 + private final static byte EQUAL_BYTES[] = "=".getBytes(); // in UTF-8 + private final static byte SEMICOLON_BYTES[] = ";".getBytes(); // in UTF-8 /** Read a mapping from the stream, as defined by the I2P data structure spec, * and store it into a Properties object. @@ -76,17 +76,17 @@ public class DataHelper { int read = read(rawStream, data); if (read != size) throw new DataFormatException("Not enough data to read the properties"); ByteArrayInputStream in = new ByteArrayInputStream(data); - byte eqBuf[] = new byte[_equalBytes.length]; - byte semiBuf[] = new byte[_semicolonBytes.length]; + byte eqBuf[] = new byte[EQUAL_BYTES.length]; + byte semiBuf[] = new byte[SEMICOLON_BYTES.length]; while (in.available() > 0) { String key = readString(in); read = read(in, eqBuf); - if ((read != eqBuf.length) || (!eq(eqBuf, _equalBytes))) { + if ((read != eqBuf.length) || (!eq(eqBuf, EQUAL_BYTES))) { break; } String val = readString(in); read = read(in, semiBuf); - if ((read != semiBuf.length) || (!eq(semiBuf, _semicolonBytes))) { + if ((read != semiBuf.length) || (!eq(semiBuf, SEMICOLON_BYTES))) { break; } props.put(key, val); @@ -123,7 +123,7 @@ public class DataHelper { if (props != null) { OrderedProperties p = new OrderedProperties(); p.putAll(props); - ByteArrayOutputStream baos = new ByteArrayOutputStream(32); + ByteArrayOutputStream baos = new ByteArrayOutputStream(p.size() * 64); for (Iterator iter = p.keySet().iterator(); iter.hasNext();) { String key = (String) iter.next(); String val = p.getProperty(key); @@ -131,15 +131,17 @@ public class DataHelper { writeStringUTF8(baos, key); else writeString(baos, key); - baos.write(_equalBytes); + baos.write(EQUAL_BYTES); if (utf8) writeStringUTF8(baos, val); else writeString(baos, val); - baos.write(_semicolonBytes); + baos.write(SEMICOLON_BYTES); } baos.close(); byte propBytes[] = baos.toByteArray(); + if (propBytes.length > 65535) + throw new DataFormatException("Properties too big (65535 max): " + propBytes.length); writeLong(rawStream, 2, propBytes.length); rawStream.write(propBytes); } else { @@ -164,9 +166,9 @@ public class DataHelper { //key = new String(key.getBytes(), "UTF-8"); //val = new String(val.getBytes(), "UTF-8"); writeString(baos, key); - baos.write(_equalBytes); + baos.write(EQUAL_BYTES); writeString(baos, val); - baos.write(_semicolonBytes); + baos.write(SEMICOLON_BYTES); } baos.close(); byte propBytes[] = baos.toByteArray(); @@ -190,17 +192,17 @@ public class DataHelper { int size = (int)fromLong(source, offset, 2); offset += 2; ByteArrayInputStream in = new ByteArrayInputStream(source, offset, size); - byte eqBuf[] = new byte[_equalBytes.length]; - byte semiBuf[] = new byte[_semicolonBytes.length]; + byte eqBuf[] = new byte[EQUAL_BYTES.length]; + byte semiBuf[] = new byte[SEMICOLON_BYTES.length]; while (in.available() > 0) { String key = readString(in); int read = read(in, eqBuf); - if ((read != eqBuf.length) || (!eq(eqBuf, _equalBytes))) { + if ((read != eqBuf.length) || (!eq(eqBuf, EQUAL_BYTES))) { break; } String val = readString(in); read = read(in, semiBuf); - if ((read != semiBuf.length) || (!eq(semiBuf, _semicolonBytes))) { + if ((read != semiBuf.length) || (!eq(semiBuf, SEMICOLON_BYTES))) { break; } target.put(key, val); @@ -280,8 +282,13 @@ public class DataHelper { String val = line.substring(split+1); //.trim() ?????????????? // Unescape line breaks after loading. // Remember: "\" needs escaping both for regex and string. - val = val.replaceAll("\\\\r","\r"); - val = val.replaceAll("\\\\n","\n"); + + // For some reason this was turning \r (one backslash) into CR, + // I think it needed one more \\ in the pattern?, + // which sucks if your username is randy on DOS, + // it was a horrible idea anyway + //val = val.replaceAll("\\\\r","\r"); + //val = val.replaceAll("\\\\n","\n"); if ( (key.length() > 0) && (val.length() > 0) ) if (forceLowerCase) props.setProperty(key.toLowerCase(), val); diff --git a/core/java/src/net/i2p/data/Destination.java b/core/java/src/net/i2p/data/Destination.java index bebfde69e..2e01271e6 100644 --- a/core/java/src/net/i2p/data/Destination.java +++ b/core/java/src/net/i2p/data/Destination.java @@ -129,9 +129,9 @@ public class Destination extends DataStructureImpl { public boolean equals(Object object) { if ((object == null) || !(object instanceof Destination)) return false; Destination dst = (Destination) object; - return DataHelper.eq(getCertificate(), dst.getCertificate()) - && DataHelper.eq(getSigningPublicKey(), dst.getSigningPublicKey()) - && DataHelper.eq(getPublicKey(), dst.getPublicKey()); + return DataHelper.eq(_certificate, dst.getCertificate()) + && DataHelper.eq(_signingKey, dst.getSigningPublicKey()) + && DataHelper.eq(_publicKey, dst.getPublicKey()); } /** the public key has enough randomness in it to use it by itself for speed */ diff --git a/core/java/src/net/i2p/data/Lease.java b/core/java/src/net/i2p/data/Lease.java index 7a5bde743..850763983 100644 --- a/core/java/src/net/i2p/data/Lease.java +++ b/core/java/src/net/i2p/data/Lease.java @@ -77,11 +77,13 @@ public class Lease extends DataStructureImpl { * Transient attribute of the lease, used to note how many times messages sent * to the destination through the current lease were successful. * + * @deprecated unused */ public int getNumSuccess() { return _numSuccess; } + /** @deprecated unused */ public void setNumSuccess(int num) { _numSuccess = num; } @@ -90,11 +92,13 @@ public class Lease extends DataStructureImpl { * Transient attribute of the lease, used to note how many times messages sent * to the destination through the current lease failed. * + * @deprecated unused */ public int getNumFailure() { return _numFailure; } + /** @deprecated unused */ public void setNumFailure(int num) { _numFailure = num; } @@ -131,25 +135,25 @@ public class Lease extends DataStructureImpl { public boolean equals(Object object) { if ((object == null) || !(object instanceof Lease)) return false; Lease lse = (Lease) object; - return DataHelper.eq(getEndDate(), lse.getEndDate()) - && DataHelper.eq(getTunnelId(), lse.getTunnelId()) - && DataHelper.eq(getGateway(), lse.getGateway()); + return DataHelper.eq(_end, lse.getEndDate()) + && DataHelper.eq(_tunnelId, lse.getTunnelId()) + && DataHelper.eq(_gateway, lse.getGateway()); } @Override public int hashCode() { - return DataHelper.hashCode(getEndDate()) + DataHelper.hashCode(getGateway()) - + DataHelper.hashCode(getTunnelId()); + return DataHelper.hashCode(_end) + DataHelper.hashCode(_gateway) + + DataHelper.hashCode(_tunnelId); } @Override public String toString() { StringBuilder buf = new StringBuilder(128); buf.append("[Lease: "); - buf.append("\n\tEnd Date: ").append(getEndDate()); - buf.append("\n\tGateway: ").append(getGateway()); - buf.append("\n\tTunnelId: ").append(getTunnelId()); + buf.append("\n\tEnd Date: ").append(_end); + buf.append("\n\tGateway: ").append(_gateway); + buf.append("\n\tTunnelId: ").append(_tunnelId); buf.append("]"); return buf.toString(); } diff --git a/core/java/src/net/i2p/data/LeaseSet.java b/core/java/src/net/i2p/data/LeaseSet.java index 4a683c257..4598a27ff 100644 --- a/core/java/src/net/i2p/data/LeaseSet.java +++ b/core/java/src/net/i2p/data/LeaseSet.java @@ -46,6 +46,13 @@ import net.i2p.util.RandomSource; * writeBytes() will output the original encrypted * leases and the original leaseset signature. * + * Revocation (zero leases) isn't used anywhere. In addition: + * - A revoked leaseset has an EarliestLeaseDate of -1, so it will + * never be stored successfully. + * - Revocation of an encrypted leaseset will explode. + * - So having an included signature at all is pointless? + * + * * @author jrandom */ public class LeaseSet extends DataStructureImpl { @@ -54,7 +61,7 @@ public class LeaseSet extends DataStructureImpl { private PublicKey _encryptionKey; private SigningPublicKey _signingKey; // Keep leases in the order received, or else signature verification will fail! - private List _leases; + private List _leases; private Signature _signature; private volatile Hash _currentRoutingKey; private volatile byte[] _routingKeyGenMod; @@ -62,7 +69,7 @@ public class LeaseSet extends DataStructureImpl { // Store these since isCurrent() and getEarliestLeaseDate() are called frequently private long _firstExpiration; private long _lastExpiration; - private List _decryptedLeases; + private List _decryptedLeases; private boolean _decrypted; private boolean _checked; @@ -75,7 +82,7 @@ public class LeaseSet extends DataStructureImpl { setSigningKey(null); setSignature(null); setRoutingKey(null); - _leases = new ArrayList(); + _leases = new ArrayList(MAX_LEASES); _routingKeyGenMod = null; _receivedAsPublished = false; _firstExpiration = Long.MAX_VALUE; @@ -100,6 +107,7 @@ public class LeaseSet extends DataStructureImpl { _encryptionKey = encryptionKey; } + /** @deprecated unused */ public SigningPublicKey getSigningKey() { return _signingKey; } @@ -130,6 +138,10 @@ public class LeaseSet extends DataStructureImpl { _lastExpiration = expire; } + /** + * @return 0-6 + * A LeaseSet with no leases is revoked. + */ public int getLeaseCount() { if (isEncrypted()) return _leases.size() - 1; @@ -208,6 +220,7 @@ public class LeaseSet extends DataStructureImpl { /** * Verify that the signature matches the lease set's destination's signing public key. + * OR the included revocation key. * * @return true only if the signature matches */ @@ -216,17 +229,18 @@ public class LeaseSet extends DataStructureImpl { if (getDestination() == null) return false; byte data[] = getBytes(); if (data == null) return false; - boolean signedByDest = DSAEngine.getInstance().verifySignature(getSignature(), data, - getDestination().getSigningPublicKey()); + boolean signedByDest = DSAEngine.getInstance().verifySignature(_signature, data, + _destination.getSigningPublicKey()); boolean signedByRevoker = false; if (!signedByDest) { - signedByRevoker = DSAEngine.getInstance().verifySignature(getSignature(), data, _signingKey); + signedByRevoker = DSAEngine.getInstance().verifySignature(_signature, data, _signingKey); } return signedByDest || signedByRevoker; } /** * Verify that the signature matches the lease set's destination's signing public key. + * OR the specified revocation key. * * @return true only if the signature matches */ @@ -235,11 +249,11 @@ public class LeaseSet extends DataStructureImpl { if (getDestination() == null) return false; byte data[] = getBytes(); if (data == null) return false; - boolean signedByDest = DSAEngine.getInstance().verifySignature(getSignature(), data, - getDestination().getSigningPublicKey()); + boolean signedByDest = DSAEngine.getInstance().verifySignature(_signature, data, + _destination.getSigningPublicKey()); boolean signedByRevoker = false; if (!signedByDest) { - signedByRevoker = DSAEngine.getInstance().verifySignature(getSignature(), data, signingKey); + signedByRevoker = DSAEngine.getInstance().verifySignature(_signature, data, signingKey); } return signedByDest || signedByRevoker; } @@ -339,9 +353,9 @@ public class LeaseSet extends DataStructureImpl { LeaseSet ls = (LeaseSet) object; return DataHelper.eq(getEncryptionKey(), ls.getEncryptionKey()) && //DataHelper.eq(getVersion(), ls.getVersion()) && - DataHelper.eq(_leases, ls._leases) && DataHelper.eq(getSignature(), ls.getSignature()) - && DataHelper.eq(getSigningKey(), ls.getSigningKey()) - && DataHelper.eq(getDestination(), ls.getDestination()); + DataHelper.eq(_leases, ls._leases) && DataHelper.eq(_signature, ls.getSignature()) + && DataHelper.eq(_signingKey, ls.getSigningKey()) + && DataHelper.eq(_destination, ls.getDestination()); } @@ -357,11 +371,11 @@ public class LeaseSet extends DataStructureImpl { public String toString() { StringBuilder buf = new StringBuilder(128); buf.append("[LeaseSet: "); - buf.append("\n\tDestination: ").append(getDestination()); - buf.append("\n\tEncryptionKey: ").append(getEncryptionKey()); - buf.append("\n\tSigningKey: ").append(getSigningKey()); + buf.append("\n\tDestination: ").append(_destination); + buf.append("\n\tEncryptionKey: ").append(_encryptionKey); + buf.append("\n\tSigningKey: ").append(_signingKey); //buf.append("\n\tVersion: ").append(getVersion()); - buf.append("\n\tSignature: ").append(getSignature()); + buf.append("\n\tSignature: ").append(_signature); buf.append("\n\tLeases: #").append(getLeaseCount()); for (int i = 0; i < getLeaseCount(); i++) buf.append("\n\t\tLease (").append(i).append("): ").append(getLease(i)); diff --git a/core/java/src/net/i2p/data/Payload.java b/core/java/src/net/i2p/data/Payload.java index 5f3af7c16..a16a64418 100644 --- a/core/java/src/net/i2p/data/Payload.java +++ b/core/java/src/net/i2p/data/Payload.java @@ -96,13 +96,13 @@ public class Payload extends DataStructureImpl { public boolean equals(Object object) { if ((object == null) || !(object instanceof Payload)) return false; Payload p = (Payload) object; - return DataHelper.eq(getUnencryptedData(), p.getUnencryptedData()) - && DataHelper.eq(getEncryptedData(), p.getEncryptedData()); + return DataHelper.eq(_unencryptedData, p.getUnencryptedData()) + && DataHelper.eq(_encryptedData, p.getEncryptedData()); } @Override public int hashCode() { - return DataHelper.hashCode(getUnencryptedData()); + return DataHelper.hashCode(_unencryptedData); } @Override @@ -110,11 +110,11 @@ public class Payload extends DataStructureImpl { if (true) return "[Payload]"; StringBuilder buf = new StringBuilder(128); buf.append("[Payload: "); - if (getUnencryptedData() != null) - buf.append("\n\tData: ").append(DataHelper.toString(getUnencryptedData(), 16)); + if (_unencryptedData != null) + buf.append("\n\tData: ").append(DataHelper.toString(_unencryptedData, 16)); else - buf.append("\n\tData: *encrypted* = [").append(DataHelper.toString(getEncryptedData(), 16)).append("]"); + buf.append("\n\tData: *encrypted* = [").append(DataHelper.toString(_encryptedData, 16)).append("]"); buf.append("]"); return buf.toString(); } -} \ No newline at end of file +} diff --git a/core/java/src/net/i2p/data/RouterAddress.java b/core/java/src/net/i2p/data/RouterAddress.java index 0f03d9d34..4d49d67a7 100644 --- a/core/java/src/net/i2p/data/RouterAddress.java +++ b/core/java/src/net/i2p/data/RouterAddress.java @@ -122,15 +122,15 @@ public class RouterAddress extends DataStructureImpl { public boolean equals(Object object) { if ((object == null) || !(object instanceof RouterAddress)) return false; RouterAddress addr = (RouterAddress) object; - return DataHelper.eq(getCost(), addr.getCost()) && DataHelper.eq(getExpiration(), addr.getExpiration()) - && DataHelper.eq(getOptions(), addr.getOptions()) - && DataHelper.eq(getTransportStyle(), addr.getTransportStyle()); + return DataHelper.eq(_cost, addr.getCost()) && DataHelper.eq(_expiration, addr.getExpiration()) + && DataHelper.eq(_options, addr.getOptions()) + && DataHelper.eq(_transportStyle, addr.getTransportStyle()); } /** the style should be sufficient, for speed */ @Override public int hashCode() { - return DataHelper.hashCode(getTransportStyle()); + return DataHelper.hashCode(_transportStyle); } @Override diff --git a/core/java/src/net/i2p/data/RouterIdentity.java b/core/java/src/net/i2p/data/RouterIdentity.java index 94f4760c1..095b54f44 100644 --- a/core/java/src/net/i2p/data/RouterIdentity.java +++ b/core/java/src/net/i2p/data/RouterIdentity.java @@ -96,9 +96,9 @@ public class RouterIdentity extends DataStructureImpl { public boolean equals(Object object) { if ((object == null) || !(object instanceof RouterIdentity)) return false; RouterIdentity ident = (RouterIdentity) object; - return DataHelper.eq(getCertificate(), ident.getCertificate()) - && DataHelper.eq(getSigningPublicKey(), ident.getSigningPublicKey()) - && DataHelper.eq(getPublicKey(), ident.getPublicKey()); + return DataHelper.eq(_certificate, ident.getCertificate()) + && DataHelper.eq(_signingKey, ident.getSigningPublicKey()) + && DataHelper.eq(_publicKey, ident.getPublicKey()); } /** the public key has enough randomness in it to use it by itself for speed */ diff --git a/core/java/src/net/i2p/data/RouterInfo.java b/core/java/src/net/i2p/data/RouterInfo.java index f3e2f4899..3f4caa711 100644 --- a/core/java/src/net/i2p/data/RouterInfo.java +++ b/core/java/src/net/i2p/data/RouterInfo.java @@ -19,6 +19,7 @@ import java.util.Iterator; import java.util.List; import java.util.Properties; import java.util.Set; +import java.util.Vector; import net.i2p.crypto.DSAEngine; import net.i2p.crypto.SHA256Generator; @@ -36,8 +37,8 @@ public class RouterInfo extends DataStructureImpl { private final static Log _log = new Log(RouterInfo.class); private RouterIdentity _identity; private volatile long _published; - private final Set _addresses; - private final Set _peers; + private final Set _addresses; + private final Set _peers; private /* FIXME final FIXME */ Properties _options; private volatile Signature _signature; private volatile Hash _currentRoutingKey; @@ -60,8 +61,8 @@ public class RouterInfo extends DataStructureImpl { public RouterInfo() { setIdentity(null); setPublished(0); - _addresses = new HashSet(); - _peers = new HashSet(); + _addresses = new HashSet(2); + _peers = new HashSet(0); _options = new OrderedProperties(); setSignature(null); _validated = false; @@ -131,7 +132,7 @@ public class RouterInfo extends DataStructureImpl { * router can be contacted. * */ - public Set getAddresses() { + public Set getAddresses() { synchronized (_addresses) { return new HashSet(_addresses); } @@ -142,7 +143,7 @@ public class RouterInfo extends DataStructureImpl { * can be contacted. * */ - public void setAddresses(Set addresses) { + public void setAddresses(Set addresses) { synchronized (_addresses) { _addresses.clear(); if (addresses != null) _addresses.addAll(addresses); @@ -151,20 +152,22 @@ public class RouterInfo extends DataStructureImpl { } /** - * Retrieve a set of SHA-256 hashes of RouterIdentities from rotuers + * Retrieve a set of SHA-256 hashes of RouterIdentities from routers * this router can be reached through. * + * @deprecated Implemented here but unused elsewhere */ - public Set getPeers() { + public Set getPeers() { return _peers; } /** - * Specify a set of SHA-256 hashes of RouterIdentities from rotuers + * Specify a set of SHA-256 hashes of RouterIdentities from routers * this router can be reached through. * + * @deprecated Implemented here but unused elsewhere */ - public void setPeers(Set peers) { + public void setPeers(Set peers) { synchronized (_peers) { _peers.clear(); if (peers != null) _peers.addAll(peers); @@ -276,6 +279,7 @@ public class RouterInfo extends DataStructureImpl { // answer: they're always empty... they're a placeholder for one particular // method of trusted links, which isn't implemented in the router // at the moment, and may not be later. + // fixme to reduce objects - if (_peers == null) write 0 DataHelper.writeLong(out, 1, _peers.size()); List peers = DataHelper.sortStructures(_peers); for (Iterator iter = peers.iterator(); iter.hasNext();) { @@ -400,7 +404,7 @@ public class RouterInfo extends DataStructureImpl { RoutingKeyGenerator gen = RoutingKeyGenerator.getInstance(); if ((gen.getModData() == null) || (_routingKeyGenMod == null) || (!DataHelper.eq(gen.getModData(), _routingKeyGenMod))) { - setRoutingKey(gen.getRoutingKey(getIdentity().getHash())); + setRoutingKey(gen.getRoutingKey(_identity.getHash())); _routingKeyGenMod = gen.getModData(); } return _currentRoutingKey; @@ -411,7 +415,7 @@ public class RouterInfo extends DataStructureImpl { } public boolean validateRoutingKey() { - Hash identKey = getIdentity().getHash(); + Hash identKey = _identity.getHash(); Hash rk = RoutingKeyGenerator.getInstance().getRoutingKey(identKey); if (rk.equals(getRoutingKey())) return true; @@ -429,7 +433,7 @@ public class RouterInfo extends DataStructureImpl { */ public boolean isCurrent(long maxAgeMs) { long earliestExpire = Clock.getInstance().now() - maxAgeMs; - if (getPublished() < earliestExpire) + if (_published < earliestExpire) return false; return true; @@ -450,6 +454,18 @@ public class RouterInfo extends DataStructureImpl { } return null; } + + public List getTargetAddresses(String transportStyle) { + List ret = new Vector(); + synchronized(this._addresses) { + for(Object o : this._addresses) { + RouterAddress addr = (RouterAddress)o; + if(addr.getTransportStyle().equals(transportStyle)) + ret.add(addr); + } + } + return ret; + } /** * Actually validate the signature @@ -537,7 +553,7 @@ public class RouterInfo extends DataStructureImpl { RouterInfo info = (RouterInfo) object; return DataHelper.eq(_identity, info.getIdentity()) && DataHelper.eq(_signature, info.getSignature()) - && DataHelper.eq(getPublished(), info.getPublished()) + && DataHelper.eq(_published, info.getPublished()) && DataHelper.eq(_addresses, info.getAddresses()) && DataHelper.eq(_options, info.getOptions()) && DataHelper.eq(_peers, info.getPeers()); @@ -546,7 +562,7 @@ public class RouterInfo extends DataStructureImpl { @Override public int hashCode() { if (!_hashCodeInitialized) { - _hashCode = DataHelper.hashCode(_identity) + (int) getPublished(); + _hashCode = DataHelper.hashCode(_identity) + (int) _published; _hashCodeInitialized = true; } return _hashCode; @@ -557,9 +573,9 @@ public class RouterInfo extends DataStructureImpl { if (_stringified != null) return _stringified; StringBuilder buf = new StringBuilder(5*1024); buf.append("[RouterInfo: "); - buf.append("\n\tIdentity: ").append(getIdentity()); - buf.append("\n\tSignature: ").append(getSignature()); - buf.append("\n\tPublished on: ").append(new Date(getPublished())); + buf.append("\n\tIdentity: ").append(_identity); + buf.append("\n\tSignature: ").append(_signature); + buf.append("\n\tPublished on: ").append(new Date(_published)); Set addresses = _addresses; // getAddresses() buf.append("\n\tAddresses: #: ").append(addresses.size()); for (Iterator iter = addresses.iterator(); iter.hasNext();) { diff --git a/core/java/src/net/i2p/data/TunnelId.java b/core/java/src/net/i2p/data/TunnelId.java index c692d70c8..a8360fae1 100644 --- a/core/java/src/net/i2p/data/TunnelId.java +++ b/core/java/src/net/i2p/data/TunnelId.java @@ -83,14 +83,14 @@ public class TunnelId extends DataStructureImpl { public boolean equals(Object obj) { if ( (obj == null) || !(obj instanceof TunnelId)) return false; - return getTunnelId() == ((TunnelId)obj).getTunnelId(); + return _tunnelId == ((TunnelId)obj).getTunnelId(); } @Override public int hashCode() { - return (int)getTunnelId(); + return (int)_tunnelId; } @Override - public String toString() { return String.valueOf(getTunnelId()); } + public String toString() { return String.valueOf(_tunnelId); } } diff --git a/core/java/src/net/i2p/time/Timestamper.java b/core/java/src/net/i2p/time/Timestamper.java index b1d763a3a..660e3c7ac 100644 --- a/core/java/src/net/i2p/time/Timestamper.java +++ b/core/java/src/net/i2p/time/Timestamper.java @@ -155,8 +155,13 @@ public class Timestamper implements Runnable { try { lastFailed = !queryTime(_servers.toArray(new String[_servers.size()])); } catch (IllegalArgumentException iae) { - if ( (!lastFailed) && (_log.shouldLog(Log.ERROR)) ) - _log.error("Unable to reach any of the NTP servers - network disconnected?"); + if ( (!_initialized) && (_log.shouldLog(Log.ERROR)) ) { + List all = new ArrayList(); + if (_priorityServers != null) + all.addAll(_priorityServers); + all.addAll(_servers); + _log.error("Unable to reach any of the NTP servers " + all + " - network disconnected? Or set time.sntpServerList=myserver1.com,myserver2.com in advanced configuration."); + } lastFailed = true; } } diff --git a/core/java/src/net/i2p/util/Clock.java b/core/java/src/net/i2p/util/Clock.java index 91fe2d9fb..669c9d92a 100644 --- a/core/java/src/net/i2p/util/Clock.java +++ b/core/java/src/net/i2p/util/Clock.java @@ -92,9 +92,10 @@ public class Clock implements Timestamper.UpdateListener { else if (getLog().shouldLog(Log.INFO)) getLog().info("Updating clock offset to " + offsetMs + "ms from " + _offset + "ms"); - if (!_statCreated) + if (!_statCreated) { _context.statManager().createRateStat("clock.skew", "How far is the already adjusted clock being skewed?", "Clock", new long[] { 10*60*1000, 3*60*60*1000, 24*60*60*60 }); _statCreated = true; + } _context.statManager().addRateData("clock.skew", delta, 0); } else { getLog().log(Log.INFO, "Initializing clock offset to " + offsetMs + "ms from " + _offset + "ms"); diff --git a/core/java/src/net/i2p/util/LogWriter.java b/core/java/src/net/i2p/util/LogWriter.java index eeb22d56c..76db2a500 100644 --- a/core/java/src/net/i2p/util/LogWriter.java +++ b/core/java/src/net/i2p/util/LogWriter.java @@ -126,15 +126,21 @@ class LogWriter implements Runnable { private void writeRecord(String val) { if (val == null) return; - if (_currentOut == null) rotateFile(); + if (_currentOut == null) { + rotateFile(); + if (_currentOut == null) + return; // hosed + } try { _currentOut.write(val); // may be a little off if a lot of multi-byte chars, but unlikely _numBytesInCurrentFile += val.length(); } catch (Throwable t) { - System.err.println("Error writing record, disk full?"); - t.printStackTrace(); + if (!_write) + return; + System.err.println("Error writing log, disk full? " + t); + //t.printStackTrace(); } if (_numBytesInCurrentFile >= _manager.getFileSize()) { rotateFile(); @@ -160,7 +166,7 @@ class LogWriter implements Runnable { } } if (!parent.isDirectory()) { - System.err.println("wtf, we cannot put the logs in a subdirectory of a plain file! we want to stre the log as " + f.getAbsolutePath()); + System.err.println("Cannot put the logs in a subdirectory of a plain file: " + f.getAbsolutePath()); //System.exit(0); } } @@ -168,8 +174,7 @@ class LogWriter implements Runnable { try { _currentOut = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f), "UTF-8")); } catch (IOException ioe) { - System.err.println("Error rotating into [" + f.getAbsolutePath() + "]"); - ioe.printStackTrace(); + System.err.println("Error rotating into [" + f.getAbsolutePath() + "]" + ioe); } } diff --git a/core/java/src/net/i2p/util/ObjectCounter.java b/core/java/src/net/i2p/util/ObjectCounter.java index 19c92ae66..ae7cc4c15 100644 --- a/core/java/src/net/i2p/util/ObjectCounter.java +++ b/core/java/src/net/i2p/util/ObjectCounter.java @@ -10,19 +10,28 @@ import java.util.concurrent.ConcurrentHashMap; */ public class ObjectCounter { private ConcurrentHashMap _map; + private static final Integer ONE = Integer.valueOf(1); + public ObjectCounter() { _map = new ConcurrentHashMap(); } + /** * Add one. * Not perfectly concurrent, new AtomicInteger(1) would be better, * at the cost of some object churn. + * @return count after increment */ - public void increment(K h) { - Integer i = _map.putIfAbsent(h, Integer.valueOf(1)); - if (i != null) - _map.put(h, Integer.valueOf(i.intValue() + 1)); + public int increment(K h) { + Integer i = _map.putIfAbsent(h, ONE); + if (i != null) { + int rv = i.intValue() + 1; + _map.put(h, Integer.valueOf(rv)); + return rv; + } + return 1; } + /** * @return current count */ @@ -32,11 +41,20 @@ public class ObjectCounter { return i.intValue(); return 0; } + /** * @return set of objects with counts > 0 */ public Set objects() { return _map.keySet(); } + + /** + * start over + * @since 0.7.11 + */ + public void clear() { + _map.clear(); + } } diff --git a/core/java/src/net/i2p/util/Translate.java b/core/java/src/net/i2p/util/Translate.java index 4ff97437d..c9072b62f 100644 --- a/core/java/src/net/i2p/util/Translate.java +++ b/core/java/src/net/i2p/util/Translate.java @@ -36,6 +36,9 @@ public abstract class Translate { return key; else if (lang.equals(TEST_LANG)) return TEST_STRING; + // shouldnt happen but dont dump the po headers if it does + if (key.equals("")) + return key; ResourceBundle bundle = findBundle(bun, lang); if (bundle == null) return key; diff --git a/debian/README.txt b/debian/README.txt new file mode 100644 index 000000000..683d50623 --- /dev/null +++ b/debian/README.txt @@ -0,0 +1,22 @@ +This sets up a binary package with the following: + +- A new user i2psvc (a lot of people already have an i2p user) +- i2psvc home is /var/lib/i2p +- $I2P is /usr/lib/i2p, owned by i2psvc +- i2psvc router directory is /var/lib/i2p/i2p-config (hack in WorkingDir.java) +- i2p daemon script in /etc/init.d/i2p +- i2prouter and eepget scripts in /usr/bin for other users to run it +- Users other than i2psvc cannot update via i2p, as they don't have + write permissions in $I2P +- Configured temp directory is /tmp +- linux and linux64 (i386) wrapper libs only + + +Todo: + +- Remove lib/jbigi.jar, just build and include dynamic libjbigi + and the linux libjcpuid (and add dependency on libgmp) +- Initial router.config for i2psvc (without confusing i2p that + the router directory already exists): + * Disable browser launch at startup + * Move i2psnark dir, eepsite dir, log dir, etc. up one level diff --git a/debian/changelog b/debian/changelog index bb17d98ae..1cc890004 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,8 @@ +i2p (0.7.10-0) testing; urgency=low + * tweaks + um... + -- zzz Wed, 31 Jan 2010 17:14:57 +0000 + i2p (0.7-0) testing; urgency=low * just setting this debian thing up um... diff --git a/debian/control b/debian/control index 5c9d9f112..9fd92ea70 100644 --- a/debian/control +++ b/debian/control @@ -1,24 +1,18 @@ Source: i2p -Maintainer: jrandom +Maintainer: i2p Section: net Priority: optional -Homepage: http://dev.i2p2.de -Build-Depends: java-sdk, ant -Recommends: libgmp3c2 -Version: 0.7-0 -Tags: implemented-in::java, interface::daemon, network::client, network::server, role::program, security::cryptography +Homepage: http://www.i2p2.de/ +Build-Depends: java-sdk, ant, gettext Package: i2p Architecture: all Section: net Priority: optional Depends: java-runtime -Recommends: libgmp3c2 Description: load-balanced unspoofable packet switching network I2P is an anonymizing network, offering a simple layer that identity-sensitive applications can use to securely communicate. All data is wrapped with several layers of encryption, and the network is both distributed and dynamic, with no trusted parties. -Homepage: http://www.i2p2.de -Version: 0.7-0 -Tags: implemented-in::java, interface::daemon, network::client, network::server, role::program, security::cryptography +Homepage: http://www.i2p2.de/ diff --git a/debian/rules b/debian/rules index 6f8aa2c9b..21009d70a 100755 --- a/debian/rules +++ b/debian/rules @@ -1,20 +1,36 @@ #!/usr/bin/make -f build: - ant preppkg && \ - (cd pkg-temp; chmod +x postinstall.sh) && \ - mkdir -p debian/tmp/var/lib && \ - mkdir -p debian/tmp/etc/init.d && \ - cp -a debian/scripts/init debian/tmp/etc/init.d/i2p && \ - cp -a pkg-temp debian/tmp/var/lib/i2p && \ + ant preppkg-linux-only + mkdir -p debian/tmp/usr/lib + mkdir -p debian/tmp/etc/init.d + cp -a debian/scripts/init debian/tmp/etc/init.d/i2p + cp -a pkg-temp debian/tmp/usr/lib/i2p + chmod +x debian/tmp/usr/lib/i2p/postinstall.sh + sed 's|$$INSTALL_PATH|/usr/lib/i2p|g' debian/tmp/usr/lib/i2p/wrapper.config > debian/tmp/usr/lib/i2p/a + sed 's|$$SYSTEM_java_io_tmpdir|/tmp|g' debian/tmp/usr/lib/i2p/a > debian/tmp/usr/lib/i2p/wrapper.config + mkdir -p debian/tmp/usr/bin + sed 's|%INSTALL_PATH|/usr/lib/i2p|g' debian/tmp/usr/lib/i2p/eepget > debian/tmp/usr/lib/i2p/a + mv debian/tmp/usr/lib/i2p/a debian/tmp/usr/lib/i2p/eepget + cp debian/tmp/usr/lib/i2p/eepget debian/tmp/usr/bin/eepget + chmod +x debian/tmp/usr/bin/eepget + sed 's|%INSTALL_PATH|/usr/lib/i2p|g' debian/tmp/usr/lib/i2p/runplain.sh > debian/tmp/usr/lib/i2p/a + sed 's|%SYSTEM_java_io_tmpdir|/tmp|g' debian/tmp/usr/lib/i2p/a > debian/tmp/usr/lib/i2p/runplain.sh + sed 's|%INSTALL_PATH|/usr/lib/i2p|g' debian/tmp/usr/lib/i2p/i2prouter > debian/tmp/usr/lib/i2p/a + sed 's|%SYSTEM_java_io_tmpdir|/tmp|g' debian/tmp/usr/lib/i2p/a > debian/tmp/usr/lib/i2p/i2prouter + cp debian/tmp/usr/lib/i2p/i2prouter debian/tmp/usr/bin/i2prouter + chmod +x debian/tmp/usr/bin/i2prouter + rm debian/tmp/usr/lib/i2p/a touch debian/build + binary: build - mkdir -p debian/tmp/DEBIAN && \ - dpkg-gencontrol && \ - cp -a debian/scripts/postinst debian/scripts/postrm debian/scripts/prerm debian/tmp/DEBIAN && \ + mkdir -p debian/tmp/DEBIAN + dpkg-gencontrol + cp -a debian/scripts/postinst debian/scripts/postrm debian/scripts/prerm debian/tmp/DEBIAN dpkg-deb -b debian/tmp .. + clean: rm -f debian/build - ant clean - rm -Rf pkg-temp + rm -rf debian/tmp/ + ant distclean @exit 0 diff --git a/debian/scripts/init b/debian/scripts/init index 5d04ac8fe..57efc1a2a 100755 --- a/debian/scripts/init +++ b/debian/scripts/init @@ -1,4 +1,4 @@ -#! /bin/sh +#!/bin/sh ### BEGIN INIT INFO # Provides: i2p @@ -13,8 +13,8 @@ set -e . /lib/lsb/init-functions -function I2P { - su i2p -c "/var/lib/i2p/i2prouter $1" +I2P () { + su i2psvc -c "/usr/lib/i2p/i2prouter $1" } case "$1" in diff --git a/debian/scripts/postinst b/debian/scripts/postinst index a1f03b83a..25ccaec33 100755 --- a/debian/scripts/postinst +++ b/debian/scripts/postinst @@ -1,9 +1,14 @@ #!/bin/sh -TOP=/var/lib/i2p -useradd -b $TOP -r i2p 2>/dev/null -chown i2p $TOP -R +SVCHOME=/var/lib/i2p +I2P=/usr/lib/i2p +I2PUSER=i2psvc -update-rc.d +useradd -d $SVCHOME -r $I2PUSER +chown $I2PUSER:$I2PUSER $I2P -R +mkdir -p $SVCHOME +chown $I2PUSER:$I2PUSER $SVCHOME -cd $TOP -exec su i2p -c ./postinstall.sh +update-rc.d i2p defaults + +cd $I2P +exec su $I2PUSER ./postinstall.sh diff --git a/debian/scripts/postrm b/debian/scripts/postrm index 633f3a9f4..f4c7218a2 100755 --- a/debian/scripts/postrm +++ b/debian/scripts/postrm @@ -1,2 +1,9 @@ #!/bin/sh -exec userdel i2p +I2PUSER=i2psvc +exec userdel $I2PUSER + +# if somebody did updates in-network, there may be new files that dpkg +# doesn't know about, so just to be sure +I2P=/usr/lib/i2p +rm -rf $I2P + diff --git a/debian/scripts/prerm b/debian/scripts/prerm index cd32c3754..7fe947121 100755 --- a/debian/scripts/prerm +++ b/debian/scripts/prerm @@ -1,2 +1,21 @@ #!/bin/sh -exec /etc/init.d/i2p stop +/etc/init.d/i2p stop + +# stuff in /tmp +rm -f /tmp/wrapper.log /tmp/wrapper.log.1 /tmp/wrapper.log.2 /tmp/i2p.pid /tmp/routerjvm.pid /tmp/router.ping + +# /etc/rc*.d/*i2p files +update-rc.d -f i2p remove + +# dpkg doesn't know about these files, created by postinstall.sh +I2P=/usr/lib/i2p +rm -f $I2P/i2psvc $I2P/lib/libwrapper.so $I2P/lib/wrapper.jar +# copied out of jbigi.jar by the router +rm -f $I2P/libjbigi.so $I2P/libjcpuid.so + +# the home directory for the i2p daemon +SVCHOME=/var/lib/i2p +rm -rf $SVCHOME + +# if any user other than i2psvc has run i2p, the files in ~user/.i2p are not removed +exit 0 diff --git a/history.txt b/history.txt index 1408fa149..ec3c07048 100644 --- a/history.txt +++ b/history.txt @@ -1,3 +1,155 @@ +2010-01-31 zzz + * i2psnark standalone: Fix CSS + * Jetty: Update to 5.1.15 to get ResourceHandler fix + +2010-01-30 sponge + * Fix NPE in TCPtoI2P when a lookup fails, report the error to the stream. + * Fix setkeys bug in DoCMDS, forgot to create the object before calling + it's methods, which threw an NPE. + +2010-01-29 zzz + * build.xml: Add a debian-source target + * Data structures: + - Speed up some hashcode() and equals() + - Cleanup and javadoc + * Jetty: Turn on checkAliases + * NetDb: + - Add basic DOS prevention for lookups + - Move flood throttle check so we don't throttle ourselves + - Don't store over client tunnels to pre-0.7.10 floodfills + - Don't update unused lease fail stats + * Startup: Disable browser launch for debian daemon + +2010-01-28 welterde + * enhance support for multiple RouterAddresses' of the same style in RouterInfo + +2010-01-26 zzz + * build.xml: Speed up distclean additions + * Clock: Don't refuse to update because of peer skew the first time + * Debian: Fixup, update, enhance scripts + * I2NP: Various cleanup and bulletproofing + * Log: Try to avoid complaints at shutdown + * Profiles: Fix lack of profiles at router startup, especially for new routers + * stats.jsp: Shrink the dropdown box + +2010-01-24 zzz + * ProfileOrganizerRenderer: Cleanups + * Reseed: Update welt's reseed hostname + * Transport clock skews: + - Store and report UDP clock skews even for large values, so + a badly skewed local clock will be reported to the console + - Don't shitlist for NTCP clock skew if we don't know what time it is + - If NTP hasn't worked yet, have NTCP or SSU update the clock one time + - Include failed clock skew in NTCP skew vector if there aren't many connections + - Don't include NTCP clock skews for non-established connections + - Fix framed clock skew frame size + - Report framed clock skew even if for only one peer, if NTP hasn't worked yet + - Don't log RRD errors after clock adjustment + - Reduce min skew for console warning to 30s (was 45s) + - More Java 5 cleanups + +2010-01-24 zzz + * Clock: + - Don't let a client update the router clock + - Restore and enhance vanished clock error log message + * Graphs: Enforce max size to lessen chance of OOM from malicious link + * NetDb: + - Move stat initialization, reduce number of rates + - Add basic DOS prevention by not flooding if stores are too-frequent + * ProfileOrganizer: + - Limit High Cap to 75 max + - Reduce max lock wait time, change no lock error to warning + - More cleanup + * Startup: + - Enable multiple parallel job runners much sooner to speed startup + - Rearrange the startup order to get the long jobs started sooner + - Don't allow the netDb readin job to clog the job queue + +2010-01-21 dr|z3d + * New eepsite structure and enhanced pages. Now with graphics and stuff! + +* 2010-01-22 0.7.10 released + +2010-01-21 zzz + * eepget.bat: Add to pkg + * Floodfills: Increase max to 15 (was 9) and min to 10 (was 4) + * I2PTunnelServer: Fix bug preventing connection retries + at startup from working + * Logs: Don't be quite so noisy in the wrapper log if we + can't open the router log + * Properties: Don't play games with \r and \n on load/save, + it was causing fatal issues on DOS if your username started + with r or n + +2010-01-19 sponge + * Firewall fix for NTCP, where firewalls will forget a NAT relationship + on a stream... AKA setting keepalive. This should fix the stuck NTCP + issue that has been bothing zzz for years. + * Set keepalive on BOB connections too, since this will assist closing + the connections in the event of a crash on a client. + +2010-01-18 zzz + * configclients.jsp: Fix add-new-client feature + * Console: Add a tunnel share ratio estimate + * graphs.jsp: + - Remove jrobin sig + - Set lower limit to 0 + - Save settings when changed + * Reseed: Support SSL and proxies + * Translate: Catch empty string + +2010-01-17 zzz + * Clock: Change a CRIT to an ERROR, lower threshold for changing from 10s to 5s + * configclients.jsp: Support add, delete, edit + * I2CP: Clean up resources on 5-minute leaseset timeout at startup + * LeaseSet generation: Increment the lease date slightly, to force + the floodfill to flood it when it changes + * NetDb Lookups: Don't try to send a RI lookup to itself through a zero-hop tunnel + * NetDb Stores and Verifies: + - Do LS stores and verifies through client tunnels + to prevent correlation by the OBEP or FF + - Encrypt LS stores to prevent snooping by the OBEP, + if the floodfill supports it + - Encrypt LS and RI verifies to prevent snooping by the OBEP + - Extend verify delay and timeout + - Reenable RI verifies + - Disallow simultaneous verifies for the same key + - Don't resend on verify timeout; try a different peer instead + - Don't resend to same peer on verify fail, try a different one + - Adjust ff selection criteria + - Flood even if received garlic-encrypted + * Profiles: Limit fast peers to 30 max + * SSLEepGet: New + * Tunnels: Prevent more than one zero-hop tunnel in a lease + * VersionComparator: Move from TrustedUpdate.java to util + +2010-01-14 sponge + * Fully clean up I2PTunnel. No more lint issues, should compile 100% + clean. + * Dropped unused class BufferLogger from I2PTunnel as it is not used + anylonger. + +2010-01-14 sponge + * Clean up reverse connection ability, remove some annoyingly redundent + code. Place all settings in the console. It works! + +2010-01-10 sponge + * Insert reverse connection ability into the http server code so that + seedless can start to get worked on. It's disabled by default. + +* 2010-01-12 0.7.9 released + +2010-01-12 zzz + * I2CP: Clean up resources on 5-minute leaseset timeout at startup + * Increase max floodfills to 9 (was 6) + * Temporarily disable routerInfo floodfill verifies + * Fix .fr eepsite index css + * Javdoc tweaks + + +2010-01-09 zzz + * Include new eepsite indexes in pkg + 2010-01-06 zzz * Summary bar tweaks diff --git a/installer/install.xml b/installer/install.xml index 95b9c051e..cf330e4f8 100644 --- a/installer/install.xml +++ b/installer/install.xml @@ -4,7 +4,7 @@ i2p - 0.7.8 + 0.7.10 @@ -138,6 +138,8 @@ + + - - Welcome to your eepsite - - - - -

      Welcome to your eepsite

      -

      (Deutsch)

      -

      This is your eepsite - simply edit the files under - ~/.i2p/eepsite/docroot/ (Linux) or %APPDATA%\I2P\eepsite\docroot\ (Windows) - and they'll be reachable by others once you follow the instructions below. - In I2P, eepsites are addressed using a 'key', which is represented as a really long Base64 string. - (The 'key' is somewhat analogous to an IP address, and - is shown on the eepsite's I2PTunnel - configuration page). - The instructions below detail how to assign a name like "mysite.i2p" to your key and - start up your eepsite.

      -

      You can reach your eepsite locally through - http://127.0.0.1:7658/. -

      - -

      Step-by-step instructions for starting your new eepsite and announcing it to the I2P community

      - Your eepsite is stopped by default. - After you start it, it will be difficult for other people to find because it - doesn't have a name and they don't have your really long Base64 key. - You could just tell people that really long key, but thankfully i2p has an address book - and several easy ways to tell people about your eepsite. Here's detailed instructions. -
        -
      • Pick a name for your eepsite (something.i2p). Use all lower-case. - You may wish to check first in your own router's address book - here, - or the file i2p/hosts.txt to see if your name is already taken. - Enter the new name for your eepsite on the - eepsite i2ptunnel configuration page - where it says "Website name". This will replace the default "mysite.i2p". - Also, check the "Auto Start" box. Your eepsite will now start every time you start your router. - Be sure and click "Save". -
      • Click the start button for your eepsite on the - main i2ptunnel configuration page. - You should now see "eepsite" listed under "Local Destinations" on the left side of the - I2P Router Console. - Your eepsite is now running. -
      • Highlight the entire "Local destination" key on the - eepsite i2ptunnel configuration page. - and copy it for - later pasting. Make sure you get the whole thing - it's over 500 characters and it must end in "AAAA". -
      • Enter the name and paste in the destination key into your - master address book. - Click "Add" to add the destination to your address book. -
      • In your browser, enter in your eepsite name (something.i2p) and you should - be right back here. Hopefully it worked. -
      • Before you tell the world about your new eepsite, you should add some content. - Go to ~/.i2p/eepsite/docroot/ (Linux) or %APPDATA%\I2P\eepsite\docroot\ (Windows) - and copy this document (index.html) to help.html so you can refer to it later. - Now edit index.html and add content, pictures, and whatever you would like to share. -
      • Now it's time to add your eepsite to an I2P address book hosted by a site - such as stats.i2p. - That is, you must enter - your eepsite name and key into a web interface on one or more of these sites. - Here is the key entry form at stats.i2p. - Again, your key is the entire "Local destination" key on the - eepsite i2ptunnel configuration page. - Be sure you get the whole thing, ending with "AAAA". - Don't forget to click "add a key". - Check to see if it reports the key was added. - Since many routers periodically get address book updates from these sites, within several hours others will be able to find your - website by simply typing something.i2p into their browser. -
      • Speaking of address book updates, this would be a good time to add some more addressbooks - to your own subscription list. Go to your subscriptions configuration page - and add a couple of these - - http://tino.i2p/hosts.txt, - http://stats.i2p/cgi-bin/newhosts.txt, - http://i2host.i2p/cgi-bin/i2hostetag, - and hit "Save". - Now you will get updates too! -
      • If you are in a hurry and can't wait a few hours, you can tell people to use a "jump" address helper redirection service. - This will work within a few minutes of your entering the key to an address book on the same site. - Test it yourself first by entering - http://stats.i2p/cgi-bin/jump.cgi?a=something.i2p or - or http://i2host.i2p/cgi-bin/i2hostjump?something.i2p - into your browser. - Once it's working, then you can tell others to use it. -
      • Some people check eepsite lists such as - inproxy.tino.i2p/status.php for new eepsites, so you may start getting - a few visitors. But there are plenty of other ways to tell people. Here are a few ideas: - - Note that some sites recommend pasting in that really long destination key. - You can if you want - but - if you have successfully posted your key at an add-key service, - tested it using a jump service, and waited 24 hours for the - address book update to propagate to others, that shouldn't be necessary. -
      • If you have any questions try IRC #i2p or the - technical problems section on - forum.i2p. - Good luck and welcome to I2P! -
      - - + + + I2P Anonymous Webserver | Welcome to your eepsite + + + + + +
      +
      +

      I2P Anonymous Webserver

      +
      + +English +中文 +Deutsch +Français +Nederlands +Русский +Svenska + +
      +

      Quick Guide to Anonymous Webserving on I2P

      + +

      This is your eepsite, your own anonymous I2P webserver - simply edit the files under ~/.i2p/eepsite/docroot/ (Linux) or %APPDATA%\I2P\eepsite\docroot\ (Windows) + and they'll be reachable by others once you follow the instructions below. + In I2P, eepsites are addressed using a 'key', which is represented as a really long Base64 string. + (The 'key' is somewhat analogous to an IP address, and + is shown on the eepsite's I2PTunnel + configuration page). + The instructions below detail how to assign a name like "mysite.i2p" to your key and start up your eepsite.

      +

      You can reach your eepsite locally via + http://127.0.0.1:7658/. +

      + +

      How to set up and announce your eepsite

      + Your eepsite is stopped by default. + After you start it, it will be difficult for other people to find because it + doesn't have a name and they don't have your really long Base64 key. + You could just tell people that really long key, but thankfully i2p has an address book + and several easy ways to tell people about your eepsite. Here's detailed instructions. +
        +
      • Pick a name for your eepsite (something.i2p). Use all lower-case. + You may wish to check first in your own router's address book + here, + or the file i2p/hosts.txt to see if your name is already taken. + Enter the new name for your eepsite on the + eepsite i2ptunnel configuration page + where it says "Website name". This will replace the default "mysite.i2p". + Also, check the "Auto Start" box. Your eepsite will now start every time you start your router. + Be sure to click "Save". +
      • Click the start button for your eepsite on the + main i2ptunnel configuration page. + You should now see "eepsite" listed under "Local Destinations" on the left side of the + I2P Router Console. + Your eepsite is now running. +
      • Highlight the entire "Local destination" key on the + eepsite i2ptunnel configuration page. + and copy it for + later pasting. Make sure you get the whole thing - it's over 500 characters and it must end in "AAAA". +
      • Enter the name and paste in the destination key into your + master address book. + Click "Add" to add the destination to your address book. +
      • In your browser, enter in your eepsite name (something.i2p) and you should + be right back here. Hopefully it worked. +
      • Before you tell the world about your new eepsite, you should add some content. + Go to ~/.i2p/eepsite/docroot/ (Linux) or %APPDATA%\I2P\eepsite\docroot\ (Windows) and replace the index.html redirect page with your own content. Virtual folders work, so you can host files from a sub directory without explicitly needing to provide a page with links to files. If you need a template for a basic site, feel free to borrow and adapt this page and content! +
      +

      Register your own .I2P Domain

        +
      • Now it's time to add your eepsite to an I2P address book hosted by a site + such as stats.i2p. + That is, you must enter + your eepsite name and key into a web interface on one or more of these sites. + Here is the key entry form at stats.i2p. + Again, your key is the entire "Local destination" key on the + eepsite i2ptunnel configuration page. + Be sure you get the whole thing, ending with "AAAA". + Don't forget to click "add a key". + Check to see if it reports the key was added. + Since many routers periodically get address book updates from these sites, within several hours others will be able to find your website by simply typing something.i2p into their browser. +

      Adding Addressbook Subscriptions

        +
      • Speaking of address book updates, this would be a good time to add some more addressbooks + to your own subscription list. Go to your subscriptions configuration page and add a couple of these for an automatically updated list of new hosts: +
      • If you are in a hurry and can't wait a few hours, you can tell people to use a "jump" address helper redirection service. + This will work within a few minutes of your entering the key to an address book on the same site. + Test it yourself first by entering + http://stats.i2p/cgi-bin/jump.cgi?a=something.i2p or + or http://i2host.i2p/cgi-bin/i2hostjump?something.i2p + into your browser. + Once it's working, then you can tell others to use it. +
      • Some people check eepsite lists such as + inproxy.tino.i2p/status.php for new eepsites, so you may start getting + a few visitors. But there are plenty of other ways to tell people. Here are a few ideas: + + Note that some sites recommend pasting in that really long destination key. + You can if you want - but + if you have successfully posted your key at an add-key service, + tested it using a jump service, and waited 24 hours for the + address book update to propagate to others, that shouldn't be necessary.
      +

      Further Assistance

      +Note: This page, the website and the console all need translating into YOUR language if it's not already been done or in progress. Please consider helping the project grow by volunteering your time to translate. Contact the project via the IRC channel listed above. Thanks in advance!
      +
      +Document last edited: November 2009.
      +
      + + diff --git a/installer/resources/eepsite_index_de.html b/installer/resources/eepsite.help/help/index_de.html similarity index 89% rename from installer/resources/eepsite_index_de.html rename to installer/resources/eepsite.help/help/index_de.html index 0c3489cde..263d9a487 100644 --- a/installer/resources/eepsite_index_de.html +++ b/installer/resources/eepsite.help/help/index_de.html @@ -1,172 +1,184 @@ - - - - - Willkommen zu Ihrer Eepsite! - - - - -

      Willkommen zu Ihrer Eepsite!

      -

      Diese ist Ihre Eepsite, Ihre Web-Präsens über I2P. Editieren Sie einfach die Dateien unter -~/.i2p/eepsite/docroot/ (Linux) oder %APPDATA%\I2P\eepsite\docroot\ (Windows) -und nachdem Sie den Anweisungen weiter unten gefolgt sind, werden Sie – -vertreten durch Ihre Eepsite – von anderen im I2P-Netz und, soweit -verfügbar, über private „Out-Proxys“ weltweit erreichbar sein.

      - -

      In I2P werden Eepsites unter Verwendung eines Schlüssels (key) adressiert, dieser wird durch eine sehr lange Base64-Zeichenkette1 dargestellt. -(Dieser Schlüssel ist analog zur Standard IP-Adresse zu verstehen; man kann ihn sich in der Konfiguration für Eepsites unter I2PTunnel anzeigen lassen.)

      - -

      Folgende Anweisungen sollen zeigen, wie man einer Eepsite einen -Namen wie beispielsweise „meineseite.i2p“ zuweist und an dem Schlüssel -bindet. -Sie können Ihre Eepsite, nachdem sie gestartet wurde, lokal unter http://127.0.0.1:7658/ erreichen.

      - -

      Es folgt eine schrittweise Anleitung für das Starten Ihrer neuen Eepsite und dessen Ankündigung in der I2P-Gemeinde.

      - -

      In der Grundeinstellung ist Ihre Eepsite nicht eingeschaltet. -Auch nach dem sie gestartet wurde, ist es für andere Teilnehmer immer -noch schwierig Ihre Seite zu finden, solange bis Sie Ihren -Base64-Schlüssel und den Namen Ihrer Eepsite veröffentlicht haben. -Natürlich können Sie den Leuten diesen sehr langen Schlüssel auch so -mitteilen, aber glücklicherweise bringt I2P bereits ein Adressbuch mit -und hat verschiedene Wege um Ihre Eepsite bekannt zu machen.

      - - -

      Eine detailierte Einführung

      - -

      Meine Eepsite

      - -
        -
      1. Wählen Sie einen eigenen Namen für Ihre Eepsite – nur in diesem -Beispiel heißt sie „meineseite.i2p“ – benutzen Sie nur Kleinschrift. -Sie können in Ihrem Adressbuch überprüfen, ob der gewünschte Name bereits vergeben ist (Anmerkung: die Daten aus den Adressbuch werden im Klartext in der i2p/hosts.txt gespeichert). -
        -
      2. -
      3. Rufen Sie nun, möglichst in einem neuen Browser-Fenster, die Konfiguration für Eepsites I2PTunnel auf. Unter „Local Server Tunnels“ wählen Sie den Eintrag „eepsite“. -Sie befinden sich nun auf der Seite mit Überschrift „Edit server -settings“. In das Feld für „Website name:“ überschreiben Sie die -Vorgabe „mysite.i2p“ mit Ihrem Wunschnamen. Optional geben Sie im Feld -„Description:“ eine Beschreibung an. -
        -
      4. -
      5. Wenn Sie möchten das Ihre Eepsite automatisch gestartet wird, kreuzen Sie das Feld „Auto Start:“ an. -
        -
      6. -
      7. Durch drücken des Links „Add to local addressbook“ gleich rechts -neben Ihrem Schlüssel (Feld „Local destination“) wird Ihr Schlüssel in -Ihr privates Adressbuch geschrieben (i2p/privatehosts.txt). -
        -
      8. -
      9. Jetzt sichern Sie Ihre Einstellungen indem Sie auf „Save“ klicken. -
        -
      10. -
      11. Wir gehen wieder zurück auf die Konfigurationsseite I2PTunnel -und drücken den „Start“-Knopf für die „eepsite“. Nach dem erfolgreichen -Start wird Ihre Eepsite auf der linken Seite in der I2P Router Console unter „Local -Destinations“ angezeigt.
      12. -
      - - - -

      Das Veröffentlichen vorbereiten

      - -
        -
      1. Heben Sie in der „Konfiguration“ -den gesamten Schlüssel für Ihre Eepsite hervor und kopieren ihn in die -Zwischenablage. Stellen Sie sicher auch tatsächlich die gesamte, über -500 Zeichen lange Zeichenkette die auf „AAAA“ endet, „erwischt“ zu -haben. -
        -
      2. -
      3. Öffnen Sie Ihr Master-Adressbuch, -tragen Ihren zuvor gewählten Wunschnamen ihrer Eepsite unter „Hostname“ -ein und kopieren den Schlüssel in das Feld „Destination“. Ein Klick auf -„Add“ und diese „Destination“ ist in Ihrem Adressbuch.2 -
        -
      4. -
      5. Ihre Eepsite sollte jetzt über den Browser erreichbar sein. Dazu -tragen Sie, wie gewohnt, den Namen Ihrer Eepsite (hier im Beispiel -„meineseite.i2p“) in die Adressleiste Ihres Browsers ein und rufen sie -auf. Wenn alles gutgegangen ist, sind Sie nun wieder hier – nur die -Adresse hat sich geändert. -
        -
      6. -
      7. Bevor Sie der Welt von Ihrer neuen Eepsite berichten sollte sie -auch über ein wenig Inhalt verfügen. Begeben Sie sich in das -Verzeichnis „~/.i2p/eepsite/docroot/“ (Linux) oder „%APPDATA%\I2P\eepsite\docroot\“ (Windows) -und benennen Sie dieses Dokument von „index.html“ nach „hilfe.html“ um, so können Sie später darauf zurück greifen. Erstellen Sie Ihre eigene „index.html“ und füllen diese mit Inhalten, Bildern oder was auch immer Sie anderen hierüber mitteilen wollen.
      8. -
      - -

      Die Eepsite öffentlich ankündigen

      - -
        -
      • Nun ist es an der Zeit, Ihre Eepsite in einem globalen I2P-Adressbuch, wie beispielsweise bei stats.i2p, -einzutragen. Das heißt, Sie müssen Namen und Schlüssel Ihrer Eepsite -und eine optionale Beschreibung in ein Formular auf einen oder mehreren -dieser Seiten eingeben. Wie schon oben gesagt, Ihr Schlüssel ist der vollständige Schlüssel wie er in der I2PTunnel Konfiguration für die „Eepsite“ -im Feld „Local destination“ angegeben ist (... über 500 Zeichen, endet -auf „AAAA“). Bestätigen Sie Ihre Angaben mit einem klick auf „Submit“. -Überprüfen Sie ob Ihr Schlüssel tatsächlich hinzugefügt wurde. -
        -
      • -
      • Da viele Router regelmäßig Adressbuchupdates von diesen Seiten -erhalten, sollten andere innerhalb einiger Stunden in der Lage sein, -Ihre Eesite durch -den Eintrag des Namens im Browser aufzurufen. -
        -
      • -
      • Weil wir gerade von Adressbuchupdates sprechen – es ist eine gute Zeit um weitere Adressbücher dem bestehenden Abonnement -hinzuzufügen. Öffnen Sie Ihre Konfiguration und fügen Sie einige der -folgenden Dienste Ihrem Abonnement hinzu (nur die jeweilige URL) und -speichern Sie die Angaben.3 Ab jetzt erhalten Sie ebenso alle Updates automatisch! -
        -

        http://tino.i2p/hosts.txt (tino.i2p)
        -http://stats.i2p/cgi-bin/newhosts.txt (stats.i2p)
        -http://i2host.i2p/cgi-bin/i2hostetag (i2host.i2p) -
        -

        -
      • -
      • Haben Sie es eilig und können nicht 12 bis 24 Stunden warten, ist -es möglich das andere für Ihre Eepseite den „jump“ -Adresshelfer-Umlenkungs-Dienst benutzen. Dieses funktioniert innerhalb -einiger Minuten nach Eingabe des Schlüssels zu einem Adressbuch auf der -gleichen Seite.

        -Zuerst testen Sie das mittels Aufruf folgender Dienste. Sobald das -klappt, können anderen diese Möglichkeit nutzen. (Ersetzen Sie -„meineseite.i2p“ durch Ihre Seite.) -
      • -
      • Manche Leute erkundigen sich auf Eepsites-Listen wie inproxy.tino.i2p/status.php über neue Eepsites, so könnten Sie an einige Besucher kommen. Aber es gibt weitere Wege sich anzukündigen: - -
          -
        • Veröffentlichen Sie eine Nachricht im I2P Forum unter Eepsite Announce
        • -
        • Besuchen sie die IRC-Kanäle #i2p oder #i2p-chat (beide englischsprachig) und Werben Sie sanft für sich.
        • -
        • Verbreiten Sie eine Nachricht über Syndie.
        • -
        • Tragen Sie sich ein in Ughas Eepsite Index Wiki. -
          -
        • -
      • -
      • Bitte beachten Sie, einige Seiten empfehlen das Einfügen des langen -„Destination“-Schlüssels; das können Sie wenn Sie möchten – aber wenn -Sie Ihren Schlüssel erfolgreich beim „Schlüssel-Dienst“ eingetragen und -ihn mittels „jump“-Dienst getestet haben, sollte nach 24 Stunden -Wartezeit dieses Vorgehen nicht nötig sein. -
        -
      • -
      • Sollten Sie Fragen haben, benutzen Sie den IRC-Kanal #i2p oder die technische Abteilung im I2P Forum
      • -
      - - -

      ______________ -

      1. Base64 -beschreibt ein Verfahren zur Kodierung von 8-Bit-Binärdaten in eine -Zeichenfolge, die nur aus wenigen, Codepage-unabhängigen ASCII-Zeichen -besteht. -

      2. Anmerkung: Wenn dieses Vorgehen mit der Fehlermeldung „Invalid nonce. Are you being spoofed?“ quittiert wird, müssen Cookies im Browser erlaubt werden. Ist dies nicht möglich, können Sie mit einem Editor die Datei „i2p/userhosts.txt“ bearbeiten und so die Adressen einfügen. Konqueror ist etwas eigenwillig. -

      3. Gleiches wie unter 2 gilt für „i2p/addressbook/subscriptions.txt“.

      - + + + + + Willkommen zu Ihrer Eepsite! + + + + +
      +
      +

      Willkommen zu Ihrer Eepsite!

      +
      + +English +中文 +Deutsch +Français +Nederlands +Русский +Svenska +
      +

      Diese ist Ihre Eepsite, Ihre Web-Präsens über I2P. Editieren Sie einfach die Dateien unter +~/.i2p/eepsite/docroot/ (Linux) oder %APPDATA%\I2P\eepsite\docroot\ (Windows) +und nachdem Sie den Anweisungen weiter unten gefolgt sind, werden Sie – +vertreten durch Ihre Eepsite – von anderen im I2P-Netz und, soweit +verfügbar, über private „Out-Proxys“ weltweit erreichbar sein.

      + +

      In I2P werden Eepsites unter Verwendung eines Schlüssels (key) adressiert, dieser wird durch eine sehr lange Base64-Zeichenkette1 dargestellt. +(Dieser Schlüssel ist analog zur Standard IP-Adresse zu verstehen; man kann ihn sich in der Konfiguration für Eepsites unter I2PTunnel anzeigen lassen.)

      + +

      Folgende Anweisungen sollen zeigen, wie man einer Eepsite einen +Namen wie beispielsweise „meineseite.i2p“ zuweist und an dem Schlüssel +bindet. +Sie können Ihre Eepsite, nachdem sie gestartet wurde, lokal unter http://127.0.0.1:7658/ erreichen.

      + +

      Es folgt eine schrittweise Anleitung für das Starten Ihrer neuen Eepsite und dessen Ankündigung in der I2P-Gemeinde.

      + +

      In der Grundeinstellung ist Ihre Eepsite nicht eingeschaltet. +Auch nach dem sie gestartet wurde, ist es für andere Teilnehmer immer +noch schwierig Ihre Seite zu finden, solange bis Sie Ihren +Base64-Schlüssel und den Namen Ihrer Eepsite veröffentlicht haben. +Natürlich können Sie den Leuten diesen sehr langen Schlüssel auch so +mitteilen, aber glücklicherweise bringt I2P bereits ein Adressbuch mit +und hat verschiedene Wege um Ihre Eepsite bekannt zu machen.

      + + +

      Eine detailierte Einführung

      + +

      Meine Eepsite

      + +
        +
      1. Wählen Sie einen eigenen Namen für Ihre Eepsite – nur in diesem +Beispiel heißt sie „meineseite.i2p“ – benutzen Sie nur Kleinschrift. +Sie können in Ihrem Adressbuch überprüfen, ob der gewünschte Name bereits vergeben ist (Anmerkung: die Daten aus den Adressbuch werden im Klartext in der i2p/hosts.txt gespeichert). +
        +
      2. +
      3. Rufen Sie nun, möglichst in einem neuen Browser-Fenster, die Konfiguration für Eepsites I2PTunnel auf. Unter „Local Server Tunnels“ wählen Sie den Eintrag „eepsite“. +Sie befinden sich nun auf der Seite mit Überschrift „Edit server +settings“. In das Feld für „Website name:“ überschreiben Sie die +Vorgabe „mysite.i2p“ mit Ihrem Wunschnamen. Optional geben Sie im Feld +„Description:“ eine Beschreibung an. +
        +
      4. +
      5. Wenn Sie möchten das Ihre Eepsite automatisch gestartet wird, kreuzen Sie das Feld „Auto Start:“ an. +
        +
      6. +
      7. Durch drücken des Links „Add to local addressbook“ gleich rechts +neben Ihrem Schlüssel (Feld „Local destination“) wird Ihr Schlüssel in +Ihr privates Adressbuch geschrieben (i2p/privatehosts.txt). +
        +
      8. +
      9. Jetzt sichern Sie Ihre Einstellungen indem Sie auf „Save“ klicken. +
        +
      10. +
      11. Wir gehen wieder zurück auf die Konfigurationsseite I2PTunnel +und drücken den „Start“-Knopf für die „eepsite“. Nach dem erfolgreichen +Start wird Ihre Eepsite auf der linken Seite in der I2P Router Console unter „Local +Destinations“ angezeigt.
      12. +
      + + + +

      Das Veröffentlichen vorbereiten

      + +
        +
      1. Heben Sie in der „Konfiguration“ +den gesamten Schlüssel für Ihre Eepsite hervor und kopieren ihn in die +Zwischenablage. Stellen Sie sicher auch tatsächlich die gesamte, über +500 Zeichen lange Zeichenkette die auf „AAAA“ endet, „erwischt“ zu +haben. +
        +
      2. +
      3. Öffnen Sie Ihr Master-Adressbuch, +tragen Ihren zuvor gewählten Wunschnamen ihrer Eepsite unter „Hostname“ +ein und kopieren den Schlüssel in das Feld „Destination“. Ein Klick auf +„Add“ und diese „Destination“ ist in Ihrem Adressbuch.2 +
        +
      4. +
      5. Ihre Eepsite sollte jetzt über den Browser erreichbar sein. Dazu +tragen Sie, wie gewohnt, den Namen Ihrer Eepsite (hier im Beispiel +„meineseite.i2p“) in die Adressleiste Ihres Browsers ein und rufen sie +auf. Wenn alles gutgegangen ist, sind Sie nun wieder hier – nur die +Adresse hat sich geändert. +
        +
      6. +
      7. Bevor Sie der Welt von Ihrer neuen Eepsite berichten sollte sie +auch über ein wenig Inhalt verfügen. Begeben Sie sich in das +Verzeichnis „~/.i2p/eepsite/docroot/“ (Linux) oder „%APPDATA%\I2P\eepsite\docroot\“ (Windows) +und benennen Sie dieses Dokument von „index.html“ nach „hilfe.html“ um, so können Sie später darauf zurück greifen. Erstellen Sie Ihre eigene „index.html“ und füllen diese mit Inhalten, Bildern oder was auch immer Sie anderen hierüber mitteilen wollen.
      8. +
      + +

      Die Eepsite öffentlich ankündigen

      + +
        +
      • Nun ist es an der Zeit, Ihre Eepsite in einem globalen I2P-Adressbuch, wie beispielsweise bei stats.i2p, +einzutragen. Das heißt, Sie müssen Namen und Schlüssel Ihrer Eepsite +und eine optionale Beschreibung in ein Formular auf einen oder mehreren +dieser Seiten eingeben. Wie schon oben gesagt, Ihr Schlüssel ist der vollständige Schlüssel wie er in der I2PTunnel Konfiguration für die „Eepsite“ +im Feld „Local destination“ angegeben ist (... über 500 Zeichen, endet +auf „AAAA“). Bestätigen Sie Ihre Angaben mit einem klick auf „Submit“. +Überprüfen Sie ob Ihr Schlüssel tatsächlich hinzugefügt wurde. +
        +
      • +
      • Da viele Router regelmäßig Adressbuchupdates von diesen Seiten +erhalten, sollten andere innerhalb einiger Stunden in der Lage sein, +Ihre Eesite durch +den Eintrag des Namens im Browser aufzurufen. +
        +
      • +
      • Weil wir gerade von Adressbuchupdates sprechen – es ist eine gute Zeit um weitere Adressbücher dem bestehenden Abonnement +hinzuzufügen. Öffnen Sie Ihre Konfiguration und fügen Sie einige der +folgenden Dienste Ihrem Abonnement hinzu (nur die jeweilige URL) und +speichern Sie die Angaben.3 Ab jetzt erhalten Sie ebenso alle Updates automatisch! +
        +

        http://tino.i2p/hosts.txt (tino.i2p)
        +http://stats.i2p/cgi-bin/newhosts.txt (stats.i2p)
        +http://i2host.i2p/cgi-bin/i2hostetag (i2host.i2p) +
        +

        +
      • +
      • Haben Sie es eilig und können nicht 12 bis 24 Stunden warten, ist +es möglich das andere für Ihre Eepseite den „jump“ +Adresshelfer-Umlenkungs-Dienst benutzen. Dieses funktioniert innerhalb +einiger Minuten nach Eingabe des Schlüssels zu einem Adressbuch auf der +gleichen Seite.

        +Zuerst testen Sie das mittels Aufruf folgender Dienste. Sobald das +klappt, können anderen diese Möglichkeit nutzen. (Ersetzen Sie +„meineseite.i2p“ durch Ihre Seite.) +
      • +
      • Manche Leute erkundigen sich auf Eepsites-Listen wie inproxy.tino.i2p/status.php über neue Eepsites, so könnten Sie an einige Besucher kommen. Aber es gibt weitere Wege sich anzukündigen: + +
          +
        • Veröffentlichen Sie eine Nachricht im I2P Forum unter Eepsite Announce
        • +
        • Besuchen sie die IRC-Kanäle #i2p oder #i2p-chat (beide englischsprachig) und Werben Sie sanft für sich.
        • +
        • Verbreiten Sie eine Nachricht über Syndie.
        • +
        • Tragen Sie sich ein in Ughas Eepsite Index Wiki. +
          +
        • +
      • +
      • Bitte beachten Sie, einige Seiten empfehlen das Einfügen des langen +„Destination“-Schlüssels; das können Sie wenn Sie möchten – aber wenn +Sie Ihren Schlüssel erfolgreich beim „Schlüssel-Dienst“ eingetragen und +ihn mittels „jump“-Dienst getestet haben, sollte nach 24 Stunden +Wartezeit dieses Vorgehen nicht nötig sein. +
        +
      • +
      • Sollten Sie Fragen haben, benutzen Sie den IRC-Kanal #i2p oder die technische Abteilung im I2P Forum
      • +
      + + +

      1. Base64 +beschreibt ein Verfahren zur Kodierung von 8-Bit-Binärdaten in eine +Zeichenfolge, die nur aus wenigen, Codepage-unabhängigen ASCII-Zeichen +besteht. +

      2. Anmerkung: Wenn dieses Vorgehen mit der Fehlermeldung „Invalid nonce. Are you being spoofed?“ quittiert wird, müssen Cookies im Browser erlaubt werden. Ist dies nicht möglich, können Sie mit einem Editor die Datei „i2p/userhosts.txt“ bearbeiten und so die Adressen einfügen. Konqueror ist etwas eigenwillig. +

      3. Gleiches wie unter 2 gilt für „i2p/addressbook/subscriptions.txt“.

      +
      + diff --git a/installer/resources/eepsite_index_fr.html b/installer/resources/eepsite.help/help/index_fr.html similarity index 96% rename from installer/resources/eepsite_index_fr.html rename to installer/resources/eepsite.help/help/index_fr.html index 74400743f..a7c7515b5 100644 --- a/installer/resources/eepsite_index_fr.html +++ b/installer/resources/eepsite.help/help/index_fr.html @@ -1,118 +1,118 @@ - - - I2P serveur web anonyme | Bienvenue à votre eepsite - - - - - -
      -
      -

      Serveur web anonyme I2P

      -
      - -English -Chinese -Deutsch -Français -Nederlands -Svenska - -
      -

      Un mini guide pour faire un serveur web anonyme utilisant I2P

      - -

      C'est votre eepsite qui fonctionne sur votre propre serveur web anonyme I2P. Afin de le mettre en route, simplement éditer les fichiers sous ./eepsite/docroot/ - et ils seront accessibles aux autres internautes dès que vous avez suivi les instructions suivantes. - Avec I2P, on accède aux eepsites en utilisant une 'clé', qui est réprésentée par une chaîne de caractères de base64. - (Cette 'clé' est un analogue d'une adresse IP et elle est montrée sur l'eepsite's I2PTunnel - Page de configuration). - Les instructions ci dessous expliquent comment associer un nom de site tel que "monsite.i2p" à votre clé et ensuite comment lancer votre eepsite.

      -

      Vous pouvez accéder votre eepsite localement via - http://127.0.0.1:7658/. -

      - -

      Comment configurer et annoncer votre eepsite

      - Votre eepsite ne fonctionne pas par défaut. - Après que vous l'ayez lancé, il sera difficile à trouver pour les internautes, car ils n'ont pas le nom de votre site et votre longue clé base64. - - Vous pourriez simplement distribuer cette très longue clé manuellement. Mais, heureusement il y un carnet d'adresse I2P - et plusieurs manières faciles de faire connaitre votre eepsite. Voici les instructions détaillées : -
        -
      • Choissisez un nom pour votre eepsite (quelquechose.i2p). Tout en minuscule. - D'abord, vérifiez dans le carnet d'adresse de votre router - ici, - ou dans le fichier i2p/hosts.txt pour voir si le nom a déjà été pris. - Entrez le nouveau nom de votre eepsite sur le - eepsite i2ptunnel page de configuration - où c'est marqué "Website name". Cela remplacera le nom défaut "mysite.i2p". - En outre, cochez "Auto Start". Votre eepsite démarrera automatiquement chaque fois que vous lancez votre router I2P. - Soyez certain de cliquer sur "Save". -
      • Cliquez sur le bouton marqué "start" - main i2ptunnel page de configuration pour lancer votre eepsite. - Maintenant vous devriez voir "eepsite" indiqué sous "Local Destinations" sur le côté gauche de votre - I2P Router Console. - Votre eepsite fonctionne. -
      • Surlignez la clé de "Local destination" en entier sur le - eepsite i2ptunnel page de configuration - et copiez-la pour la coller plus tard. - Soyez certain de copier la clé entière - elle a plus de 500 octets et elle se termine avec "AAAA". -
      • Entrez le nom et coller la clé de destination dans votre - master address book. - Cliquez sur "Add" pour ajouter la destination à votre carnet d'adresse. -
      • Dans votre explorateur internet, entrez le nom de votre eepsite (quelquechose.i2p) et vous devriez vous retrouver sur cette page. - Avec un peu de chance - si vous êtes arrivé ici, c'est que ça a marché ! -
      • Avant de parler à tout le monde de votre nouvel eepsite, vous devriez ajouter du contenu. - Allez à i2p/eepsite/docroot et remplacez la page index.html avec votre propre page. Les dossiers virtuels fonctionnent, donc vous pouvez héberger un sous-dossier sans explicitement ajouter des liens vers des fichiers. Si vous avez besoin d'un gabarit pour un site de base, n'hésitez pas à utiliser et à changer cette page et contenu! -
      -

      Enregistrer votre propre .I2P domaine

        -
      • Maintenant il faut ajouter votre eepsite au carnet d'adresse hébergé par un site - tel que stats.i2p. - C'est-à-dire, vous devez entrer - votre nom d'eepsite et sa clé dans l'interface web d'un ou plus de ces sites. - Voici le formulaire pour l'entrée d'une clé à stats.i2p. - Encore, votre clé est la "Local destination", disponible en entier ici - eepsite i2ptunnel page de configuration. - Prenez toute la clé, souvenez qu'elle se termine en "AAAA". - N'oubliez pas de cliquer sur "add a key". - Vérifiez que le site montre que la clé a été correctement ajoutée. - Comme beaucoup de routers se mettent à jour regulièrement à partir de ces sites, en quelques heures d'autres internautes seront capables de trouver et d'accéder à votre eepsite simplement en tapant quelquechose.i2p dans leurs explorateurs internet. -

      Comment ajouter des abonnements au carnet d'adresse.

        -
      • En parlant de mises à jour de carnet d'adresse, il serait prudent d'ajouter quelques carnets d'adresses de plus - à votre subscription list. Allez sur votre page d'abonnements et ajoutez quelques listes directement ci dessous afin que votre liste d'hôtes soit mise à jour automatiquement : -
      • Si vous êtes pressé et que vous ne pouvez pas attendre quelques heures, vous pouvez demander aux autres d'utiliser un "jump" (service d'aide de ré-direction d'adresse). - Cela marchera en quelques minutes après que vous ayez entré votre clé dans le carnet d'adresse sur le même site. - Testez-le vous-même en entrant : - http://stats.i2p/cgi-bin/jump.cgi?a=quelquechose.i2p - ou http://i2host.i2p/cgi-bin/i2hostjump?quelquechose.i2p - dans votre explorateur internet. - Dès que cela fonctionne, vous pouvez en parler aux autres. -
      • Certains personnes vérifient les nouveaux eepsites sur les listes tels que - inproxy.tino.i2p/status.php. Vous pouvez commencer à avoir - quelques visiteurs. Il y a beaucoup des manières d'informers les autres. Voici quelques idées : - - A noter que certains sites recommandent de coller la clé de destination directement. Vous pouvez si vous voulez, - mais si vous avez déjà réussi à poster la clé sur un service de "add key" (type stats.i2p), et attendu 24 heures pour que le carnet d'adresse - se propage aux autres, cela ne doit pas être nécessaire.
      -

      Plus d'assistance

      -Note: This page, the website and the console all need translating into YOUR language if it's not already been done or in progress. Please consider helping the project grow by volunteering your time to translate. Contact the project via the IRC channel listed above. Thanks in advance!
      -
      -Document last edited: November 2009.
      -
      - - + + + I2P serveur web anonyme | Bienvenue à votre eepsite + + + + + +
      +
      +

      Serveur web anonyme I2P

      +
      + +English +中文 +Deutsch +Français +Nederlands +Русский +Svenska +
      +

      Un mini guide pour faire un serveur web anonyme utilisant I2P

      + +

      C'est votre eepsite qui fonctionne sur votre propre serveur web anonyme I2P. Afin de le mettre en route, simplement éditer les fichiers sous ./eepsite/docroot/ + et ils seront accessibles aux autres internautes dès que vous avez suivi les instructions suivantes. + Avec I2P, on accède aux eepsites en utilisant une 'clé', qui est réprésentée par une chaîne de caractères de base64. + (Cette 'clé' est un analogue d'une adresse IP et elle est montrée sur l'eepsite's I2PTunnel + Page de configuration). + Les instructions ci dessous expliquent comment associer un nom de site tel que "monsite.i2p" à votre clé et ensuite comment lancer votre eepsite.

      +

      Vous pouvez accéder votre eepsite localement via + http://127.0.0.1:7658/. +

      + +

      Comment configurer et annoncer votre eepsite

      + Votre eepsite ne fonctionne pas par défaut. + Après que vous l'ayez lancé, il sera difficile à trouver pour les internautes, car ils n'ont pas le nom de votre site et votre longue clé base64. + + Vous pourriez simplement distribuer cette très longue clé manuellement. Mais, heureusement il y un carnet d'adresse I2P + et plusieurs manières faciles de faire connaitre votre eepsite. Voici les instructions détaillées : +
        +
      • Choissisez un nom pour votre eepsite (quelquechose.i2p). Tout en minuscule. + D'abord, vérifiez dans le carnet d'adresse de votre router + ici, + ou dans le fichier i2p/hosts.txt pour voir si le nom a déjà été pris. + Entrez le nouveau nom de votre eepsite sur le + eepsite i2ptunnel page de configuration + où c'est marqué "Website name". Cela remplacera le nom défaut "mysite.i2p". + En outre, cochez "Auto Start". Votre eepsite démarrera automatiquement chaque fois que vous lancez votre router I2P. + Soyez certain de cliquer sur "Save". +
      • Cliquez sur le bouton marqué "start" + main i2ptunnel page de configuration pour lancer votre eepsite. + Maintenant vous devriez voir "eepsite" indiqué sous "Local Destinations" sur le côté gauche de votre + I2P Router Console. + Votre eepsite fonctionne. +
      • Surlignez la clé de "Local destination" en entier sur le + eepsite i2ptunnel page de configuration + et copiez-la pour la coller plus tard. + Soyez certain de copier la clé entière - elle a plus de 500 octets et elle se termine avec "AAAA". +
      • Entrez le nom et coller la clé de destination dans votre + master address book. + Cliquez sur "Add" pour ajouter la destination à votre carnet d'adresse. +
      • Dans votre explorateur internet, entrez le nom de votre eepsite (quelquechose.i2p) et vous devriez vous retrouver sur cette page. + Avec un peu de chance - si vous êtes arrivé ici, c'est que ça a marché ! +
      • Avant de parler à tout le monde de votre nouvel eepsite, vous devriez ajouter du contenu. + Allez à i2p/eepsite/docroot et remplacez la page index.html avec votre propre page. Les dossiers virtuels fonctionnent, donc vous pouvez héberger un sous-dossier sans explicitement ajouter des liens vers des fichiers. Si vous avez besoin d'un gabarit pour un site de base, n'hésitez pas à utiliser et à changer cette page et contenu! +
      +

      Enregistrer votre propre .I2P domaine

        +
      • Maintenant il faut ajouter votre eepsite au carnet d'adresse hébergé par un site + tel que stats.i2p. + C'est-à-dire, vous devez entrer + votre nom d'eepsite et sa clé dans l'interface web d'un ou plus de ces sites. + Voici le formulaire pour l'entrée d'une clé à stats.i2p. + Encore, votre clé est la "Local destination", disponible en entier ici + eepsite i2ptunnel page de configuration. + Prenez toute la clé, souvenez qu'elle se termine en "AAAA". + N'oubliez pas de cliquer sur "add a key". + Vérifiez que le site montre que la clé a été correctement ajoutée. + Comme beaucoup de routers se mettent à jour regulièrement à partir de ces sites, en quelques heures d'autres internautes seront capables de trouver et d'accéder à votre eepsite simplement en tapant quelquechose.i2p dans leurs explorateurs internet. +

      Comment ajouter des abonnements au carnet d'adresse.

        +
      • En parlant de mises à jour de carnet d'adresse, il serait prudent d'ajouter quelques carnets d'adresses de plus + à votre subscription list. Allez sur votre page d'abonnements et ajoutez quelques listes directement ci dessous afin que votre liste d'hôtes soit mise à jour automatiquement : +
      • Si vous êtes pressé et que vous ne pouvez pas attendre quelques heures, vous pouvez demander aux autres d'utiliser un "jump" (service d'aide de ré-direction d'adresse). + Cela marchera en quelques minutes après que vous ayez entré votre clé dans le carnet d'adresse sur le même site. + Testez-le vous-même en entrant : + http://stats.i2p/cgi-bin/jump.cgi?a=quelquechose.i2p + ou http://i2host.i2p/cgi-bin/i2hostjump?quelquechose.i2p + dans votre explorateur internet. + Dès que cela fonctionne, vous pouvez en parler aux autres. +
      • Certains personnes vérifient les nouveaux eepsites sur les listes tels que + inproxy.tino.i2p/status.php. Vous pouvez commencer à avoir + quelques visiteurs. Il y a beaucoup des manières d'informers les autres. Voici quelques idées : + + A noter que certains sites recommandent de coller la clé de destination directement. Vous pouvez si vous voulez, + mais si vous avez déjà réussi à poster la clé sur un service de "add key" (type stats.i2p), et attendu 24 heures pour que le carnet d'adresse + se propage aux autres, cela ne doit pas être nécessaire.
      +

      Plus d'assistance

      +Note: This page, the website and the console all need translating into YOUR language if it's not already been done or in progress. Please consider helping the project grow by volunteering your time to translate. Contact the project via the IRC channel listed above. Thanks in advance!
      +
      +Document last edited: November 2009.
      +
      + + diff --git a/installer/resources/eepsite.help/help/index_na.html b/installer/resources/eepsite.help/help/index_na.html new file mode 100644 index 000000000..1475c6eba --- /dev/null +++ b/installer/resources/eepsite.help/help/index_na.html @@ -0,0 +1,40 @@ + + + I2P Anonymous Webserver | I'm a non-translated welcome page + + + + +
      +
      +

      I2P Anonymous Webserver

      +
      + +English +中文 +Deutsch +Français +Nederlands +Русский +Svenska + +
      +

      Help translate this page into your language!

      +
      +If you're viewing this page and not an actual translation of the welcome page into your +native tongue, that's because it hasn't been done yet! I2P +needs your help! Please consider helping I2P become more accessible +to non-English speakers by volunteering some time translating the following : + + +Please visit our IRC support channel via #i2p on Freenode or +anonymously via your resident I2P IRC tunnel for more information.
      +
      +Document last edited: November 2009.
      +
      +
      + + diff --git a/installer/resources/eepsite.help/help/index_ru.html b/installer/resources/eepsite.help/help/index_ru.html new file mode 100644 index 000000000..3fca0f2e6 --- /dev/null +++ b/installer/resources/eepsite.help/help/index_ru.html @@ -0,0 +1,102 @@ + + + Анонимный I2P веб-сервер | Добро пожаловать на ваш I2P-сайт + + + + + +
      +
      +

      Анонимный I2P веб-сервер

      +
      + +English +中文 +Deutsch +Français +Nederlands +Русский +Svenska + +
      +

      Краткое руководство по анонимному хостингу сайтов в I2P

      + +

      +Эта страничка - Ваш I2P-сайт, Ваш собственный анонимный I2P-вебсервер. Отредактируйте файлы в директории ~/.i2p/eepsite/docroot/ (Linux) или %APPDATA%\I2P\eepsite\docroot\ (Windows), выполните шаги из инструкции ниже и Ваш сайт увидят другие пользователи. + +В I2P сайты адресуются по их «ключу», который выглядит как очень длинная Base64 строка. Этот «ключ» частично выполняет функцию IP-адреса и указан на +странице настроек туннеля i2p-сайта. Далее мы расскажем Вам, как присвоить своему ключу имя типа «mysite.i2p» и запустить Ваш i2p-сайт. +

      + +

      Попробуйте открыть локально свой i2p-сайт через http://127.0.0.1:7658/. +

      + +

      Как запустить и анонсировать свой I2P-сайт

      + +Ваш i2p-сайт по умолчанию остановлен. Хотя Вы его и запустили, другим людям трудно его найти, ведь у сайта пока нет имени, а Ваш очень-длинный-Base64-ключ никому не известен. Вы, конечно, можете просто выдавать людям этот очень-длинный-Base64-ключ, но, к счастью, в I2P есть механизм адресных книг и несколько простых способов для сообщения людям о своем сайте. Далее подробные инструкции. + +
        +
      • Выберите имя для своего сайта (something.i2p). Используйте только символы в нижнем регистре. Загляните в адресную книгу Вашего маршрутизатора или в файл i2p/hosts.txt для проверки, возможно такое имя уже кто-то занял. Введите новое имя Вашего сайта на странице настроек туннеля для i2p-сайта в поле «Имя веб-сайта». Это заменит имя сайта по умолчанию «mysite.i2p». Поставьте галочку «Автозапуск». Ваш сайт будет доступен извне всегда, когда запущен Ваш маршрутизатор. Не забудьте нажать «Сохранить». + + +
      • Кликните в менеджере туннелей на кнопке запуска вашего сайта. Вы должны увидеть запись «i2p-сайт» в списке «Локальные туннели» в левой части консоли маршрутизатора. С этого момента Ваш сайт запущен. + +
      • Выделите всю строчку «Локальный адрес назначения» на странице настроек туннеля вашего I2P-сайта и скопируйте её. Убедитесь, что Вы скопировали строку целиком – ее длина больше 500 символов, строка должна заканчиваться на «AAAA». + +
      • Введите имя и вставьте ключ в Вашу основную адресную книгу. Нажмите «Добавить» для добавления адреса в адресную книгу. + +
      • Введите в браузере имя Вашего сайта (something.i2p), Вы должны снова попасть на эту страницу. Надеемся, что это сработало. + +
      • Перед тем как Вы сообщите миру о своем новом сайте, имеет смысл добавить на него какой-нибудь контент. Зайдите в директорию ~/.i2p/eepsite/docroot/ (Linux) или %APPDATA%\I2P\eepsite\docroot\ (Windows) и замените заготовку страницы index.html на Вашу информацию. Есть поддержка виртуальных папок, так что можно выкладывать файлы из поддиректорий. Если Вам нужна заготовка простого сайта, не стесняйтесь взять за основу эту страницу и эти элементы оформления! +
      + +

      Зарегистрируйте свой .I2P домен

        + +
      • Теперь пора добавить Ваш сайт в адресные книги, расположенные на сайтах-каталогах, например stats.i2p. Введите имя и ключ своего сайта через веб-интерфейс нескольких таких сайтов-каталогов. Вот форма для ввода ключа на сайте stats.i2p. Напоминаем, ключ — это вся строка «Локальный адрес назначения» на странице настройки туннеля «I2P webserver». Проверьте, что Вы скопировали его целиком, включая «AAAA» на конце. Не забудьте нажать «Add a key». Дождитесь пока система отрапортует, что ключ был добавлен. Поскольку многие маршрутизаторы периодически обновляют свои адресные книги, обращаясь к этим сайтам-каталогам, уже через несколько часов кто-нибудь откроет Ваш сайт, просто набрав something.i2p в адресной строке браузера. +
      + +

      Добавление подписок в адресную книгу

        + +
      • Кстати об обновлениях, самое время добавить несколько адресных книг в Ваш список подписки. Зайдите на страницу настройки подписок и добавьте эти ссылки для получения автоматически обновляемого списка сайтов: + + + +
      • Если Вы не можете ждать несколько часов, попробуйте воспользоваться jump-сервисом. Это возможно сразу (через несколько минут) после добавления ключа в адресную книгу на любой сайт-каталог (см. список в первом пункте). Проверьте сами — откройте в браузере http://stats.i2p/cgi-bin/jump.cgi?a=something.i2p или http://i2host.i2p/cgi-bin/i2hostjump?something.i2p. # Если это сработало для Вас, Ваши гости тоже смогут воспользоваться этим способом. + + +
      • Некоторые люди следят за обновлениями в списках i2p-сайтов, например inproxy.tino.i2p/status.php, так что скоро у Вас появятся первые посетители. Всех остальных Вы можете оповестить другими способами. Например: +
          +
        • Напишите сообщение на форуме в разделе Eepsite announce +
        • Расскажите о сайте в IRC на каналах #i2p или #i2p-chat +
        • Упомяните о сайте в постинге в Syndie. +
        • Добавьте сайт в wiki Ugha's Eepsite Index +
        + +Некоторые сайты рекомендуют вставлять в анонс Ваш очень-длинный-Base64-ключ. Вы, конечно, можете, если хотите. На самом деле, это не нужно, раз Вы уже добавили свой ключ на jump-сервисе, проверили его работу и подождали 24 часа, чтобы обновление адресной книги успело разойтись по всему I2P-миру. +
      + + +

      А что потом?

      + + +
      +На основе шаблонов: zzz, 07.10.2009 и dr|z3d, Ноябрь 2009.
      +
      + + diff --git a/installer/resources/eepsite.help/help/lib/bg.png b/installer/resources/eepsite.help/help/lib/bg.png new file mode 100644 index 000000000..9e4ec35b3 Binary files /dev/null and b/installer/resources/eepsite.help/help/lib/bg.png differ diff --git a/installer/resources/eepsite.help/help/lib/brown.png b/installer/resources/eepsite.help/help/lib/brown.png new file mode 100644 index 000000000..e530d72b4 Binary files /dev/null and b/installer/resources/eepsite.help/help/lib/brown.png differ diff --git a/installer/resources/eepsite.help/help/lib/cn.png b/installer/resources/eepsite.help/help/lib/cn.png new file mode 100644 index 000000000..891441462 Binary files /dev/null and b/installer/resources/eepsite.help/help/lib/cn.png differ diff --git a/installer/resources/eepsite.help/help/lib/de.png b/installer/resources/eepsite.help/help/lib/de.png new file mode 100644 index 000000000..ac4a97736 Binary files /dev/null and b/installer/resources/eepsite.help/help/lib/de.png differ diff --git a/installer/resources/eepsite.help/help/lib/eepsite.css b/installer/resources/eepsite.help/help/lib/eepsite.css new file mode 100644 index 000000000..5c965dcd8 --- /dev/null +++ b/installer/resources/eepsite.help/help/lib/eepsite.css @@ -0,0 +1,48 @@ +body { background-color:#000000; color: #ffffe0; margin-left: 8%; margin-right: 8%; margin-top: 6%; margin-bottom: 6%; text-align: justify; background-image: url(bg.png); } + +body,h1,h2,h3,h4,p,ul,ol,li,dl,dt,dd,div,td,th,address,blockquote {font-family: "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif; } + + +h1 { font-size:23pt; margin-bottom:20pt; border-bottom: 1px solid #ffbb77; letter-spacing: 0.05em; text-shadow: 0px 0px 24px rgba(255, 96, 48, 0.9); background-image: url(itoopie.png); background-repeat: no-repeat; background-position: right top; line-height; 200% !important; padding-bottom: 10px; word-wrap: no-wrap;} +h1.ph1 { font-size:20pt; margin-bottom:18pt; margin-right: -5px; margin-leftL -5px;} +h2 { font-size:11.5pt; margin-bottom:15px; padding: 5px 10px; border: 1px solid #ffbb77; -moz-border-radius: 5px;background-color:#110500; font-variant: small-caps; text-transform: capitalize; letter-spacing: 0.07em; background-image: url(h2bg.png); background-repeat: no-repeat; background-position: right center;} +h3 { font-size:16pt; } +h4 { font-size:14pt; } +h5 { font-size:13pt; } +p,ul,ol,li,dl,dt,dd,div,td,th,address,blockquote { font-size:9.5pt; } + +a.footref { font-size: 70%; } +a:link { color:#ffc266; text-decoration:none; } +a:visited { color:#ffd699; text-decoration:none; } +a:active { color:#ff9900; text-decoration:none; } +a:hover { color:#ffbb00; text-decoration:underline; } +a.nonexistent { color: #ffffe0; text-decoration:underline; } +a.nonexistent:visited { color: #ffffe0; text-decoration:none; } +a { font-weight: bold; font-size: 10pt; } + +dl.contents { margin-top: 0; } +dt.contents { margin-bottom: 0; } +em { font-style: italic; } +li,dt { margin: 4px 0; padding-right: 25px; list-style: square;} +p.footnote { font-size: 90%; } +p.verse { white-space: pre; margin-left: 8.7%; } +pre { font-family: monospace; white-space: pre; margin-left: 8.7%; } +strong { font-weight: bold; } +table { width:100%; }png +td { border:0px solid #000; vertical-align:top; overflow:hidden; } +ul { list-style-type: disc; margin: 10px 0;} +/* +body { border: 1px solid #ffbb77; -moz-border-radius: 5px; padding: 25px; font-size: 9.5pt; -moz-box-shadow: inset 0px 0px 1px 0px #ffbb77; background-image: url(bg.png); background-repeat: no-repeat; background-position: center center;line-height: 135%; background-attachment: fixed;} +*/ +hr { color: #fb7; background: #fb7; height: 1px; border: 0px solid #fb7; margin: 5px 0; } +div.langbar { margin-top: -25px; text-align: right; font-size: 8.5pt; } +div.langbar a { font-size: 8.5pt; outline: none;} +div.langbar img { border: 0; padding: 4px 2px 0 2px; opacity: 0.7; } +div.langbar img:hover { opacity: 1; } +div.langbar img:last-child { padding-right: 0; } +div.main { border: 2px solid #220800; -moz-border-radius: 5px; padding: 5px 25px 20px 25px; font-size: 9.5pt; -moz-box-shadow: inset 0px 0px 1px 0px #220800; background-color: #220800; background-image: url(brown.png);} +div.footnote { font-size: 7.5pt; font-style: italic; text-align: right; } +div.notify { padding: 10px; border: 1px solid #994400; background-color: #440A00; -moz-border-radius: 5px; margin: 15px 0 15px 0;} +div.fairylights { border: 1px solid #ffbb77; -moz-border-radius: 5px; padding: 1px; -moz-box-shadow: inset 0px 0px 1px 0px #ffbb77; background-color: #220800;} + + diff --git a/installer/resources/eepsite.help/help/lib/es.png b/installer/resources/eepsite.help/help/lib/es.png new file mode 100644 index 000000000..c2de2d711 Binary files /dev/null and b/installer/resources/eepsite.help/help/lib/es.png differ diff --git a/installer/resources/eepsite.help/help/lib/fr.png b/installer/resources/eepsite.help/help/lib/fr.png new file mode 100644 index 000000000..8332c4ec2 Binary files /dev/null and b/installer/resources/eepsite.help/help/lib/fr.png differ diff --git a/installer/resources/eepsite.help/help/lib/h2bg.png b/installer/resources/eepsite.help/help/lib/h2bg.png new file mode 100644 index 000000000..936dada60 Binary files /dev/null and b/installer/resources/eepsite.help/help/lib/h2bg.png differ diff --git a/installer/resources/eepsite.help/help/lib/itoopie.png b/installer/resources/eepsite.help/help/lib/itoopie.png new file mode 100644 index 000000000..240ece1f8 Binary files /dev/null and b/installer/resources/eepsite.help/help/lib/itoopie.png differ diff --git a/installer/resources/eepsite.help/help/lib/nl.png b/installer/resources/eepsite.help/help/lib/nl.png new file mode 100644 index 000000000..fe44791e3 Binary files /dev/null and b/installer/resources/eepsite.help/help/lib/nl.png differ diff --git a/installer/resources/eepsite.help/help/lib/ru.png b/installer/resources/eepsite.help/help/lib/ru.png new file mode 100644 index 000000000..47da4214f Binary files /dev/null and b/installer/resources/eepsite.help/help/lib/ru.png differ diff --git a/installer/resources/eepsite.help/help/lib/se.png b/installer/resources/eepsite.help/help/lib/se.png new file mode 100644 index 000000000..1994653da Binary files /dev/null and b/installer/resources/eepsite.help/help/lib/se.png differ diff --git a/installer/resources/eepsite.help/help/lib/us.png b/installer/resources/eepsite.help/help/lib/us.png new file mode 100644 index 000000000..10f451fe8 Binary files /dev/null and b/installer/resources/eepsite.help/help/lib/us.png differ diff --git a/installer/resources/eepsite.help/help/pagetemplate.html b/installer/resources/eepsite.help/help/pagetemplate.html new file mode 100644 index 000000000..fea7378de --- /dev/null +++ b/installer/resources/eepsite.help/help/pagetemplate.html @@ -0,0 +1,32 @@ + + + MY OWN EEPSITE + + + + +
      +
      +

      MY EEPSITE

      +
      + +English +中文 +Deutsch +Français +Nederlands +Русский +Svenska + +
      +

      Words and pictures and stuff

      +Your cool stuff here... +
      +Bring more attention to something of interest here! +
      +
      +Document last edited: November 2009.
      +
      +
      + + diff --git a/installer/resources/eepsite.help/index.html b/installer/resources/eepsite.help/index.html new file mode 100644 index 000000000..e3c081a46 --- /dev/null +++ b/installer/resources/eepsite.help/index.html @@ -0,0 +1,7 @@ + + + +I2P Anonymous Webserver + + + diff --git a/installer/resources/robots.txt b/installer/resources/eepsite.help/robots.txt similarity index 100% rename from installer/resources/robots.txt rename to installer/resources/eepsite.help/robots.txt diff --git a/installer/resources/i2prouter b/installer/resources/i2prouter index d4ac7a03f..16a46a747 100644 --- a/installer/resources/i2prouter +++ b/installer/resources/i2prouter @@ -1,4 +1,4 @@ -#! /bin/sh +#!/bin/sh # # Skeleton sh script suitable for starting and stopping diff --git a/installer/resources/initialNews.xml b/installer/resources/initialNews.xml index 1aa7eee97..8e33ec57d 100644 --- a/installer/resources/initialNews.xml +++ b/installer/resources/initialNews.xml @@ -1,5 +1,5 @@ - - + +

      • Congratulations on getting I2P installed!

      Welcome to I2P! @@ -17,6 +17,7 @@ please check out our

      Point your IRC client to localhost:6668 and say hi to us on #i2p.

      +

      • Gratulation zur erfolgreichen Installation von I2P!

      Willkommen bei I2P! @@ -32,5 +33,19 @@ Sobald auf der linken Seite eine "shared clients" Verbindung aufgelistet ist

      Verbinde deinen IRC Klienten mit dem Server auf localhost:6668 und sage Hallo zu uns im Kanal #i2p.

      + +

      • Поздравляем с успешным завершением установки I2P!

      +

      +Добро пожаловать в I2P! Немного терпения! I2P-маршрутизатору потребуется пара минут для запуска модулей и первого подключения к сети I2P. +

      +

      +Пока Вы ждете, самое время зайти в сетевые настройки и выставить ограничение скорости в соответствии со скоростью Вашего подключения к интернету. +

      +

      +Как только в панели слева в разделе «Локальные туннели» появится запись «коллективные клиенты» — I2P готов к работе. Подключайте Ваш IRC-клиент к серверу localhost:6668 и заходите сказать нам привет на канал #i2p. +

      +

      +Не забудьте заглянуть в наш FAQ. +

      diff --git a/installer/resources/jetty.xml b/installer/resources/jetty.xml index 9ff09e0bb..2f7f6791f 100644 --- a/installer/resources/jetty.xml +++ b/installer/resources/jetty.xml @@ -17,7 +17,7 @@ - + diff --git a/installer/resources/news.xml b/installer/resources/news.xml index 080265928..cd8e9ecb8 100644 --- a/installer/resources/news.xml +++ b/installer/resources/news.xml @@ -1,26 +1,20 @@ - - -

      + + +

      -The 9th I2P release for 2009, -0.7.8, contains initial support for router console translations, and -changes to the floodfill system which lay the foundation for supporting large growth in the network. +0.7.10 closes some recently-discovered vulnerabilities related to the +way routers communicate with floodfill peers. +Network database stores and verifies are moved from exploratory to client tunnels, and are encrypted.

      -To prevent easy blocking of I2P by malicious firewalls, the release randomizes the I2P port for new installs. -For existing installs, please help those who are vulnerable to blocking by changing UDP to a random port on -the network configuration page -and adjusting your firewall if necessary. -Say goodbye to port 8887! -

      -The release also contains more changes to reduce memory and CPU usage, -and a large assortment of bug fixes. +Also, to improve anonymity, router's fast peer set is now limited to a maximum of 30. +The release also fixes a bug causing Windows installs to fail when the install or user path +contained a "\r" or "\n". Upgrading is recommended. -We especially encourage those of you still running release 0.7.6 or earlier to upgrade as soon as possible. Please give the -developers feedback on IRC #i2p or forum.i2p +developers feedback on IRC #i2p or forum.i2p and get involved or donate! -We are also looking for help on new and existing translations. -Please volunteer on IRC #i2p. +We are still looking for help on new and existing translations. +Please volunteer on IRC #i2p.

      diff --git a/installer/resources/postinstall.sh b/installer/resources/postinstall.sh index 72daee17f..0ad5e866d 100644 --- a/installer/resources/postinstall.sh +++ b/installer/resources/postinstall.sh @@ -66,8 +66,6 @@ cp $wrapperpath/wrapper.jar ./lib/ cp $wrapperpath/i2psvc . chmod 744 ./eepget chmod 744 ./i2psvc -chmod 744 ./scripts/i2pbench.sh -chmod 744 ./scripts/i2ptest.sh rm -rf ./icons rm -rf ./lib/wrapper rm -f ./lib/*.dll diff --git a/installer/resources/readme/readme_ru.html b/installer/resources/readme/readme_ru.html index aa8f65ba0..46b04b49d 100644 --- a/installer/resources/readme/readme_ru.html +++ b/installer/resources/readme/readme_ru.html @@ -8,9 +8,9 @@ Svenska

      Добро пожаловать в I2P!

      -

      Когда Вы запускаете I2P впервые — числа в графе «Active» (слева) начнут расти постепенно, это может занять несколько минут. Затем в списке «Local Destinations» появится запись «shared clients» (если этого не случилось, см. «устранение неполадок»). +

      Когда Вы запускаете I2P впервые — числа в графе «Активные» (слева) начнут расти постепенно, это может занять несколько минут. Затем в списке «Локальные туннели» появится запись «коллективные клиенты» (если этого не случилось, см. «устранение неполадок»). -

      После появления записи «shared clients» Вы можете:

      +

      После появления записи «коллективные клиенты» Вы можете:

      • Просматривать I2P-сайты (веб-сайты хостящиеся анонимно внутри I2P сети). Для этого настройте в Вашем браузере HTTP прокси-сервер 127.0.0.1 порт 4444. С этими настройками попробуйте зайти на I2P-сайты по ссылкам ниже:
        @@ -48,14 +48,14 @@ Просто поместите свои файлы в директорию eepsite/docroot/ (.war-файлы JSP/сервлетов в директорию eepsite/webapps/, а CGI-скрипты в директорию eepsite/cgi-bin/). -После этого достаточно запустить i2p-туннель «eepsite tunnel», указывающий на Ваш сайт, и он станет доступным для других пользователей.

        +После этого достаточно запустить туннель «I2P webserver», указывающий на Ваш сайт, и он станет доступным для других пользователей.

        Подробную пошаговую инструкцию Вы можете найти на временной страничке-заготовке Вашего сайта.

        Поиск и устранение неполадок

        Наберитесь терпения — первый старт I2P может занять до получаса из-за начального поиска пиров. -

        Если через 30 минут в графе «Active» все еще меньше 10 подсоединенных пиров, то для повышения качества соединения Вам нужно открыть порт для I2P на Вашем файерволе или роутере (используемый номер порта можно посмотреть на странице настроек).

        +

        Если через 30 минут в графе «Активные» все еще меньше 10 подсоединенных пиров, то для повышения качества соединения Вам нужно открыть порт для I2P на Вашем файерволе или роутере (используемый номер порта можно посмотреть на странице настроек).

        Если Вы не можете соединиться ни с одним I2P-сайтом (даже www.i2p2.i2p), проверьте, включен ли в Вашем браузере HTTP-прокси 127.0.0.1 порт 4444.

        diff --git a/installer/resources/themes/console/light/console.css b/installer/resources/themes/console/light/console.css index 42d73c81c..00979a190 100644 --- a/installer/resources/themes/console/light/console.css +++ b/installer/resources/themes/console/light/console.css @@ -196,12 +196,7 @@ div.refresh { padding: 2px 0 0px 0 !important; } -div.routersummary a:link, div.routersummary a:visited { - text-shadow: 0px 0px 1px rgba(0, 0, 32, 0.5); -} - div.routersummary a:hover { - text-shadow: 0px 0px 0.5px rgba(255, 255, 255, 0.7); color: #f60; } @@ -470,7 +465,7 @@ table { cell-padding: 1px; font-size: 7pt; background: #b4c8ff url('images/tabletitlelight.png') repeat-x; - font: 7pt/130% "Lucida Sans Unicode", Verdana, Bitstream Vera Sans", Tahoma, Helvetica, sans-serif; + font: 7pt/130% "Lucida Sans Unicode", Verdana, "Bitstream Vera Sans", Tahoma, Helvetica, sans-serif; } table hr { diff --git a/installer/resources/wrapper.config b/installer/resources/wrapper.config index 3fbe0375e..380f94bc6 100644 --- a/installer/resources/wrapper.config +++ b/installer/resources/wrapper.config @@ -57,18 +57,23 @@ wrapper.java.library.path.2=$INSTALL_PATH/lib # Numbers must be consecutive (except for stripquotes) wrapper.java.additional.1=-DloggerFilenameOverride=logs/log-router-@.txt wrapper.java.additional.2=-Dorg.mortbay.http.Version.paranoid=true -wrapper.java.additional.3=-Dorg.mortbay.util.FileResource.checkAliases=false -wrapper.java.additional.4=-Dorg.mortbay.xml.XmlParser.NotValidating=true -wrapper.java.additional.5=-Di2p.dir.base="$INSTALL_PATH" -wrapper.java.additional.5.stripquotes=TRUE +wrapper.java.additional.3=-Dorg.mortbay.xml.XmlParser.NotValidating=true +wrapper.java.additional.4=-Di2p.dir.base="$INSTALL_PATH" +wrapper.java.additional.4.stripquotes=TRUE +# Jetty says this is a security risk +# Uncommenting this won't help as the router forces it to true +# If you really need this, you have to set it in jetty.xml +# somehow - not sure exactly but here's a clue: +# org.mortbay.util.FileResource.setCheckAliases(false) +# wrapper.java.additional.5=-Dorg.mortbay.util.FileResource.checkAliases=false # PORTABLE installation: # uncomment the following -#wrapper.java.additional.6=-Di2p.dir.pid="$INSTALL_PATH" +#wrapper.java.additional.5=-Di2p.dir.pid="$INSTALL_PATH" +#wrapper.java.additional.5.stripquotes=TRUE +#wrapper.java.additional.6=-Di2p.dir.temp="$INSTALL_PATH" #wrapper.java.additional.6.stripquotes=TRUE -#wrapper.java.additional.7=-Di2p.dir.temp="$INSTALL_PATH" +#wrapper.java.additional.7=-Di2p.dir.config="$INSTALL_PATH" #wrapper.java.additional.7.stripquotes=TRUE -#wrapper.java.additional.8=-Di2p.dir.config="$INSTALL_PATH" -#wrapper.java.additional.8.stripquotes=TRUE # # Uncomment this for better performance. # If it doesn't work, server mode is not available in your JVM. diff --git a/licenses/LICENSE-SNTP.txt b/licenses/LICENSE-SNTP.txt index 26c104971..fe9c2a76e 100644 --- a/licenses/LICENSE-SNTP.txt +++ b/licenses/LICENSE-SNTP.txt @@ -1,3 +1,17 @@ +> Date: Fri, 13 Aug 2004 15:58:30 +1200 (NZST) +> Message-ID: <1776.202.37.75.101.1092369510.squirrel@202.37.75.101> +> From: adam@adambuckley.net +> To: jrandom@i2p.net +> +> [...] +> +> I hereby authorize my NtpClient.java and NtpMessage.java code to be +> redistributed under the BSD license for the purpose of integration with +> the I2P project, providing that I am credited as the original author of +> the code. +> +> [...] + /* * Copyright (c) 2004, Adam Buckley * All rights reserved. diff --git a/router/java/src/net/i2p/data/i2np/DataMessage.java b/router/java/src/net/i2p/data/i2np/DataMessage.java index 641d6b40b..e98630bc8 100644 --- a/router/java/src/net/i2p/data/i2np/DataMessage.java +++ b/router/java/src/net/i2p/data/i2np/DataMessage.java @@ -22,8 +22,6 @@ public class DataMessage extends I2NPMessageImpl { public final static int MESSAGE_TYPE = 20; private byte _data[]; - // private static final int MAX_SIZE = 64*1024; // LINT -- field hides another field, and not used - public DataMessage(I2PAppContext context) { super(context); _data = null; @@ -48,7 +46,7 @@ public class DataMessage extends I2NPMessageImpl { int curIndex = offset; long size = DataHelper.fromLong(data, curIndex, 4); curIndex += 4; - if (size > 64*1024) + if (size > MAX_SIZE) throw new I2NPMessageException("wtf, size=" + size); _data = new byte[(int)size]; System.arraycopy(data, curIndex, _data, 0, (int)size); diff --git a/router/java/src/net/i2p/data/i2np/DatabaseLookupMessage.java b/router/java/src/net/i2p/data/i2np/DatabaseLookupMessage.java index 43e2ee8d5..3b197ee92 100644 --- a/router/java/src/net/i2p/data/i2np/DatabaseLookupMessage.java +++ b/router/java/src/net/i2p/data/i2np/DatabaseLookupMessage.java @@ -17,7 +17,7 @@ import net.i2p.I2PAppContext; import net.i2p.data.DataHelper; import net.i2p.data.Hash; import net.i2p.data.TunnelId; -import net.i2p.util.Log; +//import net.i2p.util.Log; /** * Defines the message a router sends to another router to search for a @@ -26,18 +26,22 @@ import net.i2p.util.Log; * @author jrandom */ public class DatabaseLookupMessage extends I2NPMessageImpl { - private final static Log _log = new Log(DatabaseLookupMessage.class); + //private final static Log _log = new Log(DatabaseLookupMessage.class); public final static int MESSAGE_TYPE = 2; private Hash _key; private Hash _fromHash; private TunnelId _replyTunnel; - private Set _dontIncludePeers; + private Set _dontIncludePeers; - private static volatile long _currentLookupPeriod = 0; - private static volatile int _currentLookupCount = 0; + //private static volatile long _currentLookupPeriod = 0; + //private static volatile int _currentLookupCount = 0; // if we try to send over 20 netDb lookups in 10 seconds, we're acting up - private static final long LOOKUP_THROTTLE_PERIOD = 10*1000; - private static final long LOOKUP_THROTTLE_MAX = 50; + //private static final long LOOKUP_THROTTLE_PERIOD = 10*1000; + //private static final long LOOKUP_THROTTLE_MAX = 50; + + /** Insanely big. Not much more than 1500 will fit in a message. + Have to prevent a huge alloc on rcv of a malicious msg though */ + private static final int MAX_NUM_PEERS = 512; public DatabaseLookupMessage(I2PAppContext context) { this(context, false); @@ -48,24 +52,27 @@ public class DatabaseLookupMessage extends I2NPMessageImpl { //setFrom(null); //setDontIncludePeers(null); - context.statManager().createRateStat("router.throttleNetDbDoSSend", "How many netDb lookup messages we are sending during a period with a DoS detected", "Throttle", new long[] { 60*1000, 10*60*1000, 60*60*1000, 24*60*60*1000 }); - + // This is the wrong place for this, any throttling should be in netdb + // And it doesnt throttle anyway (that would have to be in netdb), it just increments a stat + //context.statManager().createRateStat("router.throttleNetDbDoSSend", "How many netDb lookup messages we are sending during a period with a DoS detected", "Throttle", new long[] { 60*1000, 10*60*1000, 60*60*1000, 24*60*60*1000 }); + // // only check DoS generation if we are creating the message... - if (locallyCreated) { - // we do this in the writeMessage so we know that we have all the data - int dosCount = detectDoS(context); - if (dosCount > 0) { - if (_log.shouldLog(Log.WARN)) - _log.warn("Are we flooding the network with NetDb messages? (" + dosCount - + " messages so far)", new Exception("Flood cause")); - } - } + //if (locallyCreated) { + // // we do this in the writeMessage so we know that we have all the data + // int dosCount = detectDoS(context); + // if (dosCount > 0) { + // if (_log.shouldLog(Log.WARN)) + // _log.warn("Are we flooding the network with NetDb messages? (" + dosCount + // + " messages so far)", new Exception("Flood cause")); + // } + //} } /** * Return number of netDb messages in this period, if flood, else 0 * */ +/***** private static int detectDoS(I2PAppContext context) { int count = _currentLookupCount++; // now lets check for DoS @@ -87,6 +94,7 @@ public class DatabaseLookupMessage extends I2NPMessageImpl { return 0; } } +*****/ /** * Defines the key being searched for @@ -113,7 +121,7 @@ public class DatabaseLookupMessage extends I2NPMessageImpl { * * @return Set of Hash objects, each of which is the H(routerIdentity) to skip */ - public Set getDontIncludePeers() { return _dontIncludePeers; } + public Set getDontIncludePeers() { return _dontIncludePeers; } public void setDontIncludePeers(Set peers) { if (peers != null) _dontIncludePeers = new HashSet(peers); @@ -156,9 +164,9 @@ public class DatabaseLookupMessage extends I2NPMessageImpl { int numPeers = (int)DataHelper.fromLong(data, curIndex, 2); curIndex += 2; - if ( (numPeers < 0) || (numPeers >= (1<<16) ) ) + if ( (numPeers < 0) || (numPeers > MAX_NUM_PEERS) ) throw new I2NPMessageException("Invalid number of peers - " + numPeers); - Set peers = new HashSet(numPeers); + Set peers = new HashSet(numPeers); for (int i = 0; i < numPeers; i++) { byte peer[] = new byte[Hash.HASH_LENGTH]; System.arraycopy(data, curIndex, peer, 0, Hash.HASH_LENGTH); @@ -201,11 +209,14 @@ public class DatabaseLookupMessage extends I2NPMessageImpl { out[curIndex++] = 0x0; out[curIndex++] = 0x0; } else { - byte len[] = DataHelper.toLong(2, _dontIncludePeers.size()); + int size = _dontIncludePeers.size(); + if (size > MAX_NUM_PEERS) + throw new I2NPMessageException("Too many peers: " + size); + byte len[] = DataHelper.toLong(2, size); out[curIndex++] = len[0]; out[curIndex++] = len[1]; - for (Iterator iter = _dontIncludePeers.iterator(); iter.hasNext(); ) { - Hash peer = (Hash)iter.next(); + for (Iterator iter = _dontIncludePeers.iterator(); iter.hasNext(); ) { + Hash peer = iter.next(); System.arraycopy(peer.getData(), 0, out, curIndex, Hash.HASH_LENGTH); curIndex += Hash.HASH_LENGTH; } diff --git a/router/java/src/net/i2p/data/i2np/DatabaseSearchReplyMessage.java b/router/java/src/net/i2p/data/i2np/DatabaseSearchReplyMessage.java index ab3a7f678..085edc5a0 100644 --- a/router/java/src/net/i2p/data/i2np/DatabaseSearchReplyMessage.java +++ b/router/java/src/net/i2p/data/i2np/DatabaseSearchReplyMessage.java @@ -26,13 +26,14 @@ import net.i2p.data.Hash; public class DatabaseSearchReplyMessage extends I2NPMessageImpl { public final static int MESSAGE_TYPE = 3; private Hash _key; - private List _peerHashes; + private List _peerHashes; private Hash _from; public DatabaseSearchReplyMessage(I2PAppContext context) { super(context); - _context.statManager().createRateStat("netDb.searchReplyMessageSend", "How many search reply messages we send", "NetworkDatabase", new long[] { 60*1000, 5*60*1000, 10*60*1000, 60*60*1000 }); - _context.statManager().createRateStat("netDb.searchReplyMessageReceive", "How many search reply messages we receive", "NetworkDatabase", new long[] { 60*1000, 5*60*1000, 10*60*1000, 60*60*1000 }); + // do this in netdb if we need it + //_context.statManager().createRateStat("netDb.searchReplyMessageSend", "How many search reply messages we send", "NetworkDatabase", new long[] { 60*1000, 5*60*1000, 10*60*1000, 60*60*1000 }); + //_context.statManager().createRateStat("netDb.searchReplyMessageReceive", "How many search reply messages we receive", "NetworkDatabase", new long[] { 60*1000, 5*60*1000, 10*60*1000, 60*60*1000 }); setSearchKey(null); _peerHashes = new ArrayList(3); setFromHash(null); @@ -45,7 +46,7 @@ public class DatabaseSearchReplyMessage extends I2NPMessageImpl { public void setSearchKey(Hash key) { _key = key; } public int getNumReplies() { return _peerHashes.size(); } - public Hash getReply(int index) { return (Hash)_peerHashes.get(index); } + public Hash getReply(int index) { return _peerHashes.get(index); } public void addReply(Hash peer) { _peerHashes.add(peer); } //public void addReplies(Collection replies) { _peerHashes.addAll(replies); } @@ -77,7 +78,7 @@ public class DatabaseSearchReplyMessage extends I2NPMessageImpl { curIndex += Hash.HASH_LENGTH; _from = new Hash(from); - _context.statManager().addRateData("netDb.searchReplyMessageReceive", num*32 + 64, 1); + //_context.statManager().addRateData("netDb.searchReplyMessageReceive", num*32 + 64, 1); } /** calculate the message body's length (not including the header and footer */ diff --git a/router/java/src/net/i2p/data/i2np/GarlicMessage.java b/router/java/src/net/i2p/data/i2np/GarlicMessage.java index 88d2f2b37..72d7e5d06 100644 --- a/router/java/src/net/i2p/data/i2np/GarlicMessage.java +++ b/router/java/src/net/i2p/data/i2np/GarlicMessage.java @@ -44,7 +44,7 @@ public class GarlicMessage extends I2NPMessageImpl { long len = DataHelper.fromLong(data, curIndex, 4); curIndex += 4; - if ( (len <= 0) || (len > 64*1024) ) throw new I2NPMessageException("size="+len); + if ( (len <= 0) || (len > MAX_SIZE) ) throw new I2NPMessageException("size="+len); _data = new byte[(int)len]; System.arraycopy(data, curIndex, _data, 0, (int)len); } diff --git a/router/java/src/net/i2p/data/i2np/I2NPMessageImpl.java b/router/java/src/net/i2p/data/i2np/I2NPMessageImpl.java index 561ad607b..6dd63a6ab 100644 --- a/router/java/src/net/i2p/data/i2np/I2NPMessageImpl.java +++ b/router/java/src/net/i2p/data/i2np/I2NPMessageImpl.java @@ -374,8 +374,9 @@ public abstract class I2NPMessageImpl extends DataStructureImpl implements I2NPM return new DatabaseSearchReplyMessage(context); case DeliveryStatusMessage.MESSAGE_TYPE: return new DeliveryStatusMessage(context); - case DateMessage.MESSAGE_TYPE: - return new DateMessage(context); + // unused since forever (0.5?) + //case DateMessage.MESSAGE_TYPE: + // return new DateMessage(context); case GarlicMessage.MESSAGE_TYPE: return new GarlicMessage(context); case TunnelDataMessage.MESSAGE_TYPE: @@ -384,6 +385,7 @@ public abstract class I2NPMessageImpl extends DataStructureImpl implements I2NPM return new TunnelGatewayMessage(context); case DataMessage.MESSAGE_TYPE: return new DataMessage(context); + // unused since 0.6.1.10 case TunnelBuildMessage.MESSAGE_TYPE: return new TunnelBuildMessage(context); case TunnelBuildReplyMessage.MESSAGE_TYPE: diff --git a/router/java/src/net/i2p/router/DummyTunnelManagerFacade.java b/router/java/src/net/i2p/router/DummyTunnelManagerFacade.java index 4b8fb486e..2adc9ac33 100644 --- a/router/java/src/net/i2p/router/DummyTunnelManagerFacade.java +++ b/router/java/src/net/i2p/router/DummyTunnelManagerFacade.java @@ -35,6 +35,7 @@ class DummyTunnelManagerFacade implements TunnelManagerFacade { public int getFreeTunnelCount() { return 0; } public int getOutboundTunnelCount() { return 0; } public int getInboundClientTunnelCount() { return 0; } + public double getShareRatio() { return 0d; } public int getOutboundClientTunnelCount() { return 0; } public long getLastParticipatingExpiration() { return -1; } public void buildTunnels(Destination client, ClientTunnelSettings settings) {} diff --git a/router/java/src/net/i2p/router/ProfileManager.java b/router/java/src/net/i2p/router/ProfileManager.java index f829bdaeb..f861ab186 100644 --- a/router/java/src/net/i2p/router/ProfileManager.java +++ b/router/java/src/net/i2p/router/ProfileManager.java @@ -155,6 +155,7 @@ public interface ProfileManager { * through an explicit dbStore or in a dbLookupReply */ void heardAbout(Hash peer); + void heardAbout(Hash peer, long when); /** * Note that the router received a message from the given peer on the specified diff --git a/router/java/src/net/i2p/router/Router.java b/router/java/src/net/i2p/router/Router.java index 6c97b2124..b730d6d4a 100644 --- a/router/java/src/net/i2p/router/Router.java +++ b/router/java/src/net/i2p/router/Router.java @@ -105,6 +105,12 @@ public class Router { System.setProperty("user.timezone", "GMT"); // just in case, lets make it explicit... TimeZone.setDefault(TimeZone.getTimeZone("GMT")); + // https://www.kb.cert.org/vuls/id/402580 + // http://docs.codehaus.org/display/JETTY/SystemProperties + // Fixed in Jetty 5.1.15 but we are running 5.1.12 + // The default is true, unfortunately it was previously + // set to false in wrapper.config thru 0.7.10 so we must set it back here. + System.setProperty("Dorg.mortbay.util.FileResource.checkAliases", "true"); } public Router() { this(null, null); } @@ -1053,8 +1059,9 @@ public class Router { String val = _config.getProperty(key); // Escape line breaks before saving. // Remember: "\" needs escaping both for regex and string. - val = val.replaceAll("\\r","\\\\r"); - val = val.replaceAll("\\n","\\\\n"); + // NOOO - see comments in DataHelper + //val = val.replaceAll("\\r","\\\\r"); + //val = val.replaceAll("\\n","\\\\n"); buf.append(key).append('=').append(val).append('\n'); } } diff --git a/router/java/src/net/i2p/router/RouterClock.java b/router/java/src/net/i2p/router/RouterClock.java index b6731b0fd..bb22dfbcb 100644 --- a/router/java/src/net/i2p/router/RouterClock.java +++ b/router/java/src/net/i2p/router/RouterClock.java @@ -29,8 +29,6 @@ public class RouterClock extends Clock { */ @Override public void setOffset(long offsetMs, boolean force) { - - if (false) return; long delta = offsetMs - _offset; if (!force) { if ((offsetMs > MAX_OFFSET) || (offsetMs < 0 - MAX_OFFSET)) { @@ -54,7 +52,8 @@ public class RouterClock extends Clock { } // If so configured, check sanity of proposed clock offset - if (Boolean.valueOf(_contextRC.getProperty("router.clockOffsetSanityCheck","true")).booleanValue() == true) { + if (Boolean.valueOf(_contextRC.getProperty("router.clockOffsetSanityCheck","true")).booleanValue() && + _alreadyChanged) { // Try calculating peer clock skew Long peerClockSkew = _contextRC.commSystem().getFramedAveragePeerClockSkew(50); @@ -88,9 +87,10 @@ public class RouterClock extends Clock { else if (getLog().shouldLog(Log.INFO)) getLog().info("Updating clock offset to " + offsetMs + "ms from " + _offset + "ms"); - if (!_statCreated) + if (!_statCreated) { _contextRC.statManager().createRateStat("clock.skew", "How far is the already adjusted clock being skewed?", "Clock", new long[] { 10*60*1000, 3*60*60*1000, 24*60*60*60 }); _statCreated = true; + } _contextRC.statManager().addRateData("clock.skew", delta, 0); } else { getLog().log(Log.INFO, "Initializing clock offset to " + offsetMs + "ms from " + _offset + "ms"); diff --git a/router/java/src/net/i2p/router/RouterContext.java b/router/java/src/net/i2p/router/RouterContext.java index 8f1c240c3..dfa9d7c21 100644 --- a/router/java/src/net/i2p/router/RouterContext.java +++ b/router/java/src/net/i2p/router/RouterContext.java @@ -134,8 +134,8 @@ public class RouterContext extends I2PAppContext { _shitlist = new Shitlist(this); _blocklist = new Blocklist(this); _messageValidator = new MessageValidator(this); - //_throttle = new RouterThrottleImpl(this); - _throttle = new RouterDoSThrottle(this); + _throttle = new RouterThrottleImpl(this); + //_throttle = new RouterDoSThrottle(this); _integrationCalc = new IntegrationCalculator(this); _speedCalc = new SpeedCalculator(this); _capacityCalc = new CapacityCalculator(this); diff --git a/router/java/src/net/i2p/router/RouterDoSThrottle.java b/router/java/src/net/i2p/router/RouterDoSThrottle.java index 79471627a..5f49206bb 100644 --- a/router/java/src/net/i2p/router/RouterDoSThrottle.java +++ b/router/java/src/net/i2p/router/RouterDoSThrottle.java @@ -6,6 +6,7 @@ import net.i2p.data.Hash; * Minor extention of the router throttle to handle some DoS events and * throttle accordingly. * + * @deprecated unused */ class RouterDoSThrottle extends RouterThrottleImpl { public RouterDoSThrottle(RouterContext context) { diff --git a/router/java/src/net/i2p/router/RouterThrottleImpl.java b/router/java/src/net/i2p/router/RouterThrottleImpl.java index 750acb073..289f929a8 100644 --- a/router/java/src/net/i2p/router/RouterThrottleImpl.java +++ b/router/java/src/net/i2p/router/RouterThrottleImpl.java @@ -72,6 +72,7 @@ class RouterThrottleImpl implements RouterThrottle { } } + /** @deprecated unused, function moved to netdb */ public boolean acceptNetDbLookupRequest(Hash key) { long lag = _context.jobQueue().getMaxLag(); if (lag > JOB_LAG_LIMIT) { diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java index 32a2083be..e72c467bc 100644 --- a/router/java/src/net/i2p/router/RouterVersion.java +++ b/router/java/src/net/i2p/router/RouterVersion.java @@ -18,7 +18,8 @@ public class RouterVersion { /** deprecated */ public final static String ID = "Monotone"; public final static String VERSION = CoreVersion.VERSION; - public final static long BUILD = 17; + public final static long BUILD = 6; + /** for example "-test" */ public final static String EXTRA = ""; public final static String FULL_VERSION = VERSION + "-" + BUILD + EXTRA; diff --git a/router/java/src/net/i2p/router/TunnelManagerFacade.java b/router/java/src/net/i2p/router/TunnelManagerFacade.java index 148499a43..b1cfd5c28 100644 --- a/router/java/src/net/i2p/router/TunnelManagerFacade.java +++ b/router/java/src/net/i2p/router/TunnelManagerFacade.java @@ -51,6 +51,7 @@ public interface TunnelManagerFacade extends Service { public int getInboundClientTunnelCount(); /** how many outbound client tunnels do we have available? */ public int getOutboundClientTunnelCount(); + public double getShareRatio(); /** When does the last tunnel we are participating in expire? */ public long getLastParticipatingExpiration(); diff --git a/router/java/src/net/i2p/router/message/OutboundClientMessageOneShotJob.java b/router/java/src/net/i2p/router/message/OutboundClientMessageOneShotJob.java index 6e64d2040..e82a5f5fb 100644 --- a/router/java/src/net/i2p/router/message/OutboundClientMessageOneShotJob.java +++ b/router/java/src/net/i2p/router/message/OutboundClientMessageOneShotJob.java @@ -977,7 +977,8 @@ public class OutboundClientMessageOneShotJob extends JobImpl { long dataMsgId = _cloveId; getContext().messageHistory().sendPayloadMessage(dataMsgId, true, sendTime); getContext().clientManager().messageDeliveryStatusUpdate(_from, _clientMessageId, true); - _lease.setNumSuccess(_lease.getNumSuccess()+1); + // unused + //_lease.setNumSuccess(_lease.getNumSuccess()+1); int size = _clientMessageSize; @@ -1022,7 +1023,8 @@ public class OutboundClientMessageOneShotJob extends JobImpl { _log.debug(OutboundClientMessageOneShotJob.this.getJobId() + ": Soft timeout through the lease " + _lease); - _lease.setNumFailure(_lease.getNumFailure()+1); + // unused + //_lease.setNumFailure(_lease.getNumFailure()+1); if (_key != null && _tags != null && _leaseSet != null) { SessionKeyManager skm = getContext().clientManager().getClientSessionKeyManager(_from.calculateHash()); if (skm != null) diff --git a/router/java/src/net/i2p/router/networkdb/HandleDatabaseLookupMessageJob.java b/router/java/src/net/i2p/router/networkdb/HandleDatabaseLookupMessageJob.java index 55266f085..4cb5a9d26 100644 --- a/router/java/src/net/i2p/router/networkdb/HandleDatabaseLookupMessageJob.java +++ b/router/java/src/net/i2p/router/networkdb/HandleDatabaseLookupMessageJob.java @@ -55,13 +55,6 @@ public class HandleDatabaseLookupMessageJob extends JobImpl { public HandleDatabaseLookupMessageJob(RouterContext ctx, DatabaseLookupMessage receivedMessage, RouterIdentity from, Hash fromHash) { super(ctx); _log = getContext().logManager().getLog(HandleDatabaseLookupMessageJob.class); - getContext().statManager().createRateStat("netDb.lookupsHandled", "How many netDb lookups have we handled?", "NetworkDatabase", new long[] { 5*60*1000l, 60*60*1000l, 24*60*60*1000l }); - getContext().statManager().createRateStat("netDb.lookupsMatched", "How many netDb lookups did we have the data for?", "NetworkDatabase", new long[] { 5*60*1000l, 60*60*1000l, 24*60*60*1000l }); - getContext().statManager().createRateStat("netDb.lookupsMatchedLeaseSet", "How many netDb leaseSet lookups did we have the data for?", "NetworkDatabase", new long[] { 5*60*1000l, 60*60*1000l, 24*60*60*1000l }); - getContext().statManager().createRateStat("netDb.lookupsMatchedReceivedPublished", "How many netDb lookups did we have the data for that were published to us?", "NetworkDatabase", new long[] { 5*60*1000l, 60*60*1000l, 24*60*60*1000l }); - getContext().statManager().createRateStat("netDb.lookupsMatchedLocalClosest", "How many netDb lookups for local data were received where we are the closest peers?", "NetworkDatabase", new long[] { 5*60*1000l, 60*60*1000l, 24*60*60*1000l }); - getContext().statManager().createRateStat("netDb.lookupsMatchedLocalNotClosest", "How many netDb lookups for local data were received where we are NOT the closest peers?", "NetworkDatabase", new long[] { 5*60*1000l, 60*60*1000l, 24*60*60*1000l }); - getContext().statManager().createRateStat("netDb.lookupsMatchedRemoteNotClosest", "How many netDb lookups for remote data were received where we are NOT the closest peers?", "NetworkDatabase", new long[] { 5*60*1000l, 60*60*1000l, 24*60*60*1000l }); _message = receivedMessage; _from = from; _fromHash = fromHash; diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/FloodThrottler.java b/router/java/src/net/i2p/router/networkdb/kademlia/FloodThrottler.java new file mode 100644 index 000000000..96b0f508d --- /dev/null +++ b/router/java/src/net/i2p/router/networkdb/kademlia/FloodThrottler.java @@ -0,0 +1,34 @@ +package net.i2p.router.networkdb.kademlia; + +import net.i2p.data.Hash; +import net.i2p.util.ObjectCounter; +import net.i2p.util.SimpleScheduler; +import net.i2p.util.SimpleTimer; + +/** + * Count how often we have recently flooded a key + * This offers basic DOS protection but is not a complete solution. + * + * @since 0.7.11 + */ +class FloodThrottler { + private ObjectCounter counter; + private static final int MAX_FLOODS = 3; + private static final long CLEAN_TIME = 60*1000; + + FloodThrottler() { + this.counter = new ObjectCounter(); + SimpleScheduler.getInstance().addPeriodicEvent(new Cleaner(), CLEAN_TIME); + } + + /** increments before checking */ + boolean shouldThrottle(Hash h) { + return this.counter.increment(h) > MAX_FLOODS; + } + + private class Cleaner implements SimpleTimer.TimedEvent { + public void timeReached() { + FloodThrottler.this.counter.clear(); + } + } +} diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillDatabaseLookupMessageHandler.java b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillDatabaseLookupMessageHandler.java index 7076960d3..8ef121d06 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillDatabaseLookupMessageHandler.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillDatabaseLookupMessageHandler.java @@ -23,29 +23,41 @@ import net.i2p.util.Log; */ public class FloodfillDatabaseLookupMessageHandler implements HandlerJobBuilder { private RouterContext _context; + private FloodfillNetworkDatabaseFacade _facade; private Log _log; - public FloodfillDatabaseLookupMessageHandler(RouterContext context) { + + public FloodfillDatabaseLookupMessageHandler(RouterContext context, FloodfillNetworkDatabaseFacade facade) { _context = context; + _facade = facade; _log = context.logManager().getLog(FloodfillDatabaseLookupMessageHandler.class); - _context.statManager().createRateStat("netDb.lookupsReceived", "How many netDb lookups have we received?", "NetworkDatabase", new long[] { 5*60*1000l, 60*60*1000l, 24*60*60*1000l }); - _context.statManager().createRateStat("netDb.lookupsDropped", "How many netDb lookups did we drop due to throttling?", "NetworkDatabase", new long[] { 5*60*1000l, 60*60*1000l, 24*60*60*1000l }); + _context.statManager().createRateStat("netDb.lookupsReceived", "How many netDb lookups have we received?", "NetworkDatabase", new long[] { 60*60*1000l }); + _context.statManager().createRateStat("netDb.lookupsDropped", "How many netDb lookups did we drop due to throttling?", "NetworkDatabase", new long[] { 60*60*1000l }); + // following are for ../HDLMJ + _context.statManager().createRateStat("netDb.lookupsHandled", "How many netDb lookups have we handled?", "NetworkDatabase", new long[] { 60*60*1000l }); + _context.statManager().createRateStat("netDb.lookupsMatched", "How many netDb lookups did we have the data for?", "NetworkDatabase", new long[] { 60*60*1000l }); + _context.statManager().createRateStat("netDb.lookupsMatchedLeaseSet", "How many netDb leaseSet lookups did we have the data for?", "NetworkDatabase", new long[] { 60*60*1000l }); + _context.statManager().createRateStat("netDb.lookupsMatchedReceivedPublished", "How many netDb lookups did we have the data for that were published to us?", "NetworkDatabase", new long[] { 60*60*1000l }); + _context.statManager().createRateStat("netDb.lookupsMatchedLocalClosest", "How many netDb lookups for local data were received where we are the closest peers?", "NetworkDatabase", new long[] { 60*60*1000l }); + _context.statManager().createRateStat("netDb.lookupsMatchedLocalNotClosest", "How many netDb lookups for local data were received where we are NOT the closest peers?", "NetworkDatabase", new long[] { 60*60*1000l }); + _context.statManager().createRateStat("netDb.lookupsMatchedRemoteNotClosest", "How many netDb lookups for remote data were received where we are NOT the closest peers?", "NetworkDatabase", new long[] { 60*60*1000l }); } public Job createJob(I2NPMessage receivedMessage, RouterIdentity from, Hash fromHash) { _context.statManager().addRateData("netDb.lookupsReceived", 1, 0); - if (true || _context.throttle().acceptNetDbLookupRequest(((DatabaseLookupMessage)receivedMessage).getSearchKey())) { - Job j = new HandleFloodfillDatabaseLookupMessageJob(_context, (DatabaseLookupMessage)receivedMessage, from, fromHash); - if (false) { - // might as well inline it, all the heavy lifting is queued up in later jobs, if necessary - j.runJob(); - return null; - } else { + DatabaseLookupMessage dlm = (DatabaseLookupMessage)receivedMessage; + if (!_facade.shouldThrottleLookup(dlm.getFrom(), dlm.getReplyTunnel())) { + Job j = new HandleFloodfillDatabaseLookupMessageJob(_context, dlm, from, fromHash); + //if (false) { + // // might as well inline it, all the heavy lifting is queued up in later jobs, if necessary + // j.runJob(); + // return null; + //} else { return j; - } + //} } else { - if (_log.shouldLog(Log.INFO)) - _log.info("Dropping lookup request as throttled"); + if (_log.shouldLog(Log.WARN)) + _log.warn("Dropping lookup request for " + dlm.getSearchKey() + " (throttled), reply was to: " + dlm.getFrom() + " tunnel: " + dlm.getReplyTunnel()); _context.statManager().addRateData("netDb.lookupsDropped", 1, 1); return null; } diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillDatabaseStoreMessageHandler.java b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillDatabaseStoreMessageHandler.java index 5d94cde3e..e4c6ce71a 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillDatabaseStoreMessageHandler.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillDatabaseStoreMessageHandler.java @@ -27,7 +27,13 @@ public class FloodfillDatabaseStoreMessageHandler implements HandlerJobBuilder { public FloodfillDatabaseStoreMessageHandler(RouterContext context, FloodfillNetworkDatabaseFacade facade) { _context = context; _facade = facade; + // following are for HFDSMJ + context.statManager().createRateStat("netDb.storeHandled", "How many netDb store messages have we handled?", "NetworkDatabase", new long[] { 60*60*1000l }); + context.statManager().createRateStat("netDb.storeLeaseSetHandled", "How many leaseSet store messages have we handled?", "NetworkDatabase", new long[] { 60*60*1000l }); + context.statManager().createRateStat("netDb.storeRouterInfoHandled", "How many routerInfo store messages have we handled?", "NetworkDatabase", new long[] { 60*60*1000l }); + context.statManager().createRateStat("netDb.storeRecvTime", "How long it takes to handle the local store part of a dbStore?", "NetworkDatabase", new long[] { 60*60*1000l }); } + public Job createJob(I2NPMessage receivedMessage, RouterIdentity from, Hash fromHash) { Job j = new HandleFloodfillDatabaseStoreMessageJob(_context, (DatabaseStoreMessage)receivedMessage, from, fromHash, _facade); if (false) { diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillMonitorJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillMonitorJob.java index 24d27c27a..3f24a5e10 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillMonitorJob.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillMonitorJob.java @@ -26,8 +26,8 @@ class FloodfillMonitorJob extends JobImpl { private static final int REQUEUE_DELAY = 60*60*1000; private static final long MIN_UPTIME = 2*60*60*1000; private static final long MIN_CHANGE_DELAY = 6*60*60*1000; - private static final int MIN_FF = 4; - private static final int MAX_FF = 6; + private static final int MIN_FF = 10; + private static final int MAX_FF = 15; private static final String PROP_FLOODFILL_PARTICIPANT = "router.floodfillParticipant"; public FloodfillMonitorJob(RouterContext context, FloodfillNetworkDatabaseFacade facade) { diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillNetworkDatabaseFacade.java b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillNetworkDatabaseFacade.java index b51466d15..8993da433 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillNetworkDatabaseFacade.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillNetworkDatabaseFacade.java @@ -12,6 +12,7 @@ import net.i2p.data.DataStructure; import net.i2p.data.Hash; import net.i2p.data.LeaseSet; import net.i2p.data.RouterInfo; +import net.i2p.data.TunnelId; import net.i2p.data.i2np.DatabaseLookupMessage; import net.i2p.data.i2np.DatabaseSearchReplyMessage; import net.i2p.data.i2np.DatabaseStoreMessage; @@ -37,6 +38,8 @@ public class FloodfillNetworkDatabaseFacade extends KademliaNetworkDatabaseFacad /** for testing, see isFloodfill() below */ private static String _alwaysQuery; private final Set _verifiesInProgress; + private FloodThrottler _floodThrottler; + private LookupThrottler _lookupThrottler; public FloodfillNetworkDatabaseFacade(RouterContext context) { super(context); @@ -62,11 +65,12 @@ public class FloodfillNetworkDatabaseFacade extends KademliaNetworkDatabaseFacad public void startup() { super.startup(); _context.jobQueue().addJob(new FloodfillMonitorJob(_context, this)); + _lookupThrottler = new LookupThrottler(); } @Override protected void createHandlers() { - _context.inNetMessagePool().registerHandlerJobBuilder(DatabaseLookupMessage.MESSAGE_TYPE, new FloodfillDatabaseLookupMessageHandler(_context)); + _context.inNetMessagePool().registerHandlerJobBuilder(DatabaseLookupMessage.MESSAGE_TYPE, new FloodfillDatabaseLookupMessageHandler(_context, this)); _context.inNetMessagePool().registerHandlerJobBuilder(DatabaseStoreMessage.MESSAGE_TYPE, new FloodfillDatabaseStoreMessageHandler(_context, this)); } @@ -102,6 +106,22 @@ public class FloodfillNetworkDatabaseFacade extends KademliaNetworkDatabaseFacad } } + /** + * Increments and tests. + * @since 0.7.11 + */ + boolean shouldThrottleFlood(Hash key) { + return _floodThrottler != null && _floodThrottler.shouldThrottle(key); + } + + /** + * Increments and tests. + * @since 0.7.11 + */ + boolean shouldThrottleLookup(Hash from, TunnelId id) { + return _lookupThrottler.shouldThrottle(from, id); + } + private static final int MAX_TO_FLOOD = 7; /** @@ -124,6 +144,10 @@ public class FloodfillNetworkDatabaseFacade extends KademliaNetworkDatabaseFacad RouterInfo target = lookupRouterInfoLocally(peer); if ( (target == null) || (_context.shitlist().isShitlisted(peer)) ) continue; + // Don't flood a RI back to itself + // Not necessary, a ff will do its own flooding (reply token == 0) + //if (peer.equals(target.getIdentity().getHash())) + // continue; if (peer.equals(_context.routerHash())) continue; DatabaseStoreMessage msg = new DatabaseStoreMessage(_context); @@ -176,7 +200,17 @@ public class FloodfillNetworkDatabaseFacade extends KademliaNetworkDatabaseFacad @Override protected PeerSelector createPeerSelector() { return new FloodfillPeerSelector(_context); } - public void setFloodfillEnabled(boolean yes) { _floodfillEnabled = yes; } + synchronized void setFloodfillEnabled(boolean yes) { + _floodfillEnabled = yes; + if (yes && _floodThrottler == null) { + _floodThrottler = new FloodThrottler(); + _context.statManager().createRateStat("netDb.floodThrottled", "How often do we decline to flood?", "NetworkDatabase", new long[] { 60*60*1000l }); + // following are for HFDSMJ + _context.statManager().createRateStat("netDb.storeFloodNew", "How long it takes to flood out a newly received entry?", "NetworkDatabase", new long[] { 60*60*1000l }); + _context.statManager().createRateStat("netDb.storeFloodOld", "How often we receive an old entry?", "NetworkDatabase", new long[] { 60*60*1000l }); + } + } + public boolean floodfillEnabled() { return _floodfillEnabled; } public static boolean floodfillEnabled(RouterContext ctx) { return ((FloodfillNetworkDatabaseFacade)ctx.netDb()).floodfillEnabled(); diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillStoreJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillStoreJob.java index 8fcdb0fa6..14969df83 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillStoreJob.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillStoreJob.java @@ -54,6 +54,7 @@ class FloodfillStoreJob extends StoreJob { @Override protected void succeed() { super.succeed(); + if (_state != null) { if (_facade.isVerifyInProgress(_state.getTarget())) { if (_log.shouldLog(Log.INFO)) @@ -67,6 +68,8 @@ class FloodfillStoreJob extends StoreJob { boolean isRouterInfo = data instanceof RouterInfo; if (isRouterInfo) { published = ((RouterInfo) data).getPublished(); + // Temporarily disable + return; } else if (data instanceof LeaseSet) { published = ((LeaseSet) data).getEarliestLeaseDate(); } diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/HandleFloodfillDatabaseStoreMessageJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/HandleFloodfillDatabaseStoreMessageJob.java index 12140a9e4..452d8a60b 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/HandleFloodfillDatabaseStoreMessageJob.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/HandleFloodfillDatabaseStoreMessageJob.java @@ -39,14 +39,6 @@ public class HandleFloodfillDatabaseStoreMessageJob extends JobImpl { public HandleFloodfillDatabaseStoreMessageJob(RouterContext ctx, DatabaseStoreMessage receivedMessage, RouterIdentity from, Hash fromHash, FloodfillNetworkDatabaseFacade facade) { super(ctx); _log = ctx.logManager().getLog(getClass()); - ctx.statManager().createRateStat("netDb.storeHandled", "How many netDb store messages have we handled?", "NetworkDatabase", new long[] { 5*60*1000l, 60*60*1000l, 24*60*60*1000l }); - ctx.statManager().createRateStat("netDb.storeLeaseSetHandled", "How many leaseSet store messages have we handled?", "NetworkDatabase", new long[] { 5*60*1000l, 60*60*1000l, 24*60*60*1000l }); - //ctx.statManager().createRateStat("netDb.storeLocalLeaseSetAttempt", "Peer tries to store our leaseset (multihome?)", "NetworkDatabase", new long[] { 60*60*1000l }); - //ctx.statManager().createRateStat("netDb.storeLocalRouterInfoAttempt", "Peer tries to store our router info", "NetworkDatabase", new long[] { 60*60*1000l }); - ctx.statManager().createRateStat("netDb.storeRouterInfoHandled", "How many routerInfo store messages have we handled?", "NetworkDatabase", new long[] { 5*60*1000l, 60*60*1000l, 24*60*60*1000l }); - ctx.statManager().createRateStat("netDb.storeRecvTime", "How long it takes to handle the local store part of a dbStore?", "NetworkDatabase", new long[] { 60*1000l, 10*60*1000l }); - ctx.statManager().createRateStat("netDb.storeFloodNew", "How long it takes to flood out a newly received entry?", "NetworkDatabase", new long[] { 60*1000l, 10*60*1000l }); - ctx.statManager().createRateStat("netDb.storeFloodOld", "How often we receive an old entry?", "NetworkDatabase", new long[] { 60*1000l, 10*60*1000l }); _message = receivedMessage; _from = from; _fromHash = fromHash; @@ -62,9 +54,9 @@ public class HandleFloodfillDatabaseStoreMessageJob extends JobImpl { String invalidMessage = null; boolean wasNew = false; RouterInfo prevNetDb = null; + Hash key = _message.getKey(); if (_message.getValueType() == DatabaseStoreMessage.KEY_TYPE_LEASESET) { getContext().statManager().addRateData("netDb.storeLeaseSetHandled", 1, 0); - Hash key = _message.getKey(); if (_log.shouldLog(Log.INFO)) _log.info("Handling dbStore of leaseset " + _message); //_log.info("Handling dbStore of leasset " + key + " with expiration of " @@ -100,7 +92,6 @@ public class HandleFloodfillDatabaseStoreMessageJob extends JobImpl { } } else if (_message.getValueType() == DatabaseStoreMessage.KEY_TYPE_ROUTERINFO) { getContext().statManager().addRateData("netDb.storeRouterInfoHandled", 1, 0); - Hash key = _message.getKey(); if (_log.shouldLog(Log.INFO)) _log.info("Handling dbStore of router " + key + " with publishDate of " + new Date(_message.getRouterInfo().getPublished())); @@ -171,6 +162,14 @@ public class HandleFloodfillDatabaseStoreMessageJob extends JobImpl { FloodfillNetworkDatabaseFacade.floodfillEnabled(getContext()) && _message.getReplyToken() > 0) { if (wasNew) { + // DOS prevention + // Note this does not throttle the ack above + if (_facade.shouldThrottleFlood(key)) { + if (_log.shouldLog(Log.WARN)) + _log.warn("Too many recent stores, not flooding key: " + key); + getContext().statManager().addRateData("netDb.floodThrottled", 1, 0); + return; + } long floodBegin = System.currentTimeMillis(); if (_message.getValueType() == DatabaseStoreMessage.KEY_TYPE_LEASESET) _facade.flood(_message.getLeaseSet()); diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/KBucketImpl.java b/router/java/src/net/i2p/router/networkdb/kademlia/KBucketImpl.java index 2df76e40c..2ef143fee 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/KBucketImpl.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/KBucketImpl.java @@ -231,7 +231,7 @@ class KBucketImpl implements KBucket { /** * Todo: shuffling here is a hack and doesn't work since - * wwe witched back to a HashSet implementation + * we switched back to a HashSet implementation */ public int add(Hash peer) { _entries.add(peer); diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java b/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java index 312fce6a7..dc2bb3ac9 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java @@ -44,7 +44,6 @@ import net.i2p.router.networkdb.DatabaseStoreMessageHandler; import net.i2p.router.networkdb.PublishLocalRouterInfoJob; import net.i2p.router.peermanager.PeerProfile; import net.i2p.util.Log; -import net.i2p.util.ObjectCounter; /** * Kademlia based version of the network database @@ -140,8 +139,17 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { _lastExploreNew = 0; _activeRequests = new HashMap(8); _enforceNetId = DEFAULT_ENFORCE_NETID; - context.statManager().createRateStat("netDb.lookupLeaseSetDeferred", "how many lookups are deferred for a single leaseSet lookup?", "NetworkDatabase", new long[] { 60*1000, 5*60*1000 }); - context.statManager().createRateStat("netDb.exploreKeySet", "how many keys are queued for exploration?", "NetworkDatabase", new long[] { 10*60*1000 }); + context.statManager().createRateStat("netDb.lookupLeaseSetDeferred", "how many lookups are deferred for a single leaseSet lookup?", "NetworkDatabase", new long[] { 60*60*1000 }); + context.statManager().createRateStat("netDb.exploreKeySet", "how many keys are queued for exploration?", "NetworkDatabase", new long[] { 60*60*1000 }); + // following are for StoreJob + context.statManager().createRateStat("netDb.storeRouterInfoSent", "How many routerInfo store messages have we sent?", "NetworkDatabase", new long[] { 60*60*1000l }); + context.statManager().createRateStat("netDb.storeLeaseSetSent", "How many leaseSet store messages have we sent?", "NetworkDatabase", new long[] { 60*60*1000l }); + context.statManager().createRateStat("netDb.storePeers", "How many peers each netDb must be sent to before success?", "NetworkDatabase", new long[] { 60*60*1000l }); + context.statManager().createRateStat("netDb.storeFailedPeers", "How many peers each netDb must be sent to before failing completely?", "NetworkDatabase", new long[] { 60*60*1000l }); + context.statManager().createRateStat("netDb.ackTime", "How long does it take for a peer to ack a netDb store?", "NetworkDatabase", new long[] { 60*60*1000l }); + context.statManager().createRateStat("netDb.replyTimeout", "How long after a netDb send does the timeout expire (when the peer doesn't reply in time)?", "NetworkDatabase", new long[] { 60*60*1000l }); + // following is for RepublishLeaseSetJob + context.statManager().createRateStat("netDb.republishLeaseSetCount", "How often we republish a leaseSet?", "NetworkDatabase", new long[] { 60*60*1000l }); } @Override @@ -634,6 +642,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { // Iterate through the old failure / success count, copying over the old // values (if any tunnels overlap between leaseSets). no need to be // ueberthreadsafe fascists here, since these values are just heuristics + /****** unused if (rv != null) { for (int i = 0; i < rv.getLeaseCount(); i++) { Lease old = rv.getLease(i); @@ -647,6 +656,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { } } } + *******/ return rv; } @@ -910,6 +920,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { return TIMEOUT_MULTIPLIER * (int)responseTime; // give it up to 3x the average response time } + /** unused (overridden in FNDF) */ public void sendStore(Hash key, DataStructure ds, Job onSuccess, Job onFailure, long sendTimeout, Set toIgnore) { if ( (ds == null) || (key == null) ) { if (onFailure != null) diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/LookupThrottler.java b/router/java/src/net/i2p/router/networkdb/kademlia/LookupThrottler.java new file mode 100644 index 000000000..b4cef3621 --- /dev/null +++ b/router/java/src/net/i2p/router/networkdb/kademlia/LookupThrottler.java @@ -0,0 +1,70 @@ +package net.i2p.router.networkdb.kademlia; + +import net.i2p.data.Hash; +import net.i2p.data.TunnelId; +import net.i2p.util.ObjectCounter; +import net.i2p.util.SimpleScheduler; +import net.i2p.util.SimpleTimer; + +/** + * Count how often we have recently received a lookup request with + * the reply specified to go to a peer/TunnelId pair. + * This offers basic DOS protection but is not a complete solution. + * The reply peer/tunnel could be spoofed, for example. + * And a requestor could have up to 6 reply tunnels. + * + * @since 0.7.11 + */ +class LookupThrottler { + private ObjectCounter counter; + /** the id of this is -1 */ + private static final TunnelId DUMMY_ID = new TunnelId(); + /** this seems like plenty */ + private static final int MAX_LOOKUPS = 30; + private static final long CLEAN_TIME = 60*1000; + + LookupThrottler() { + this.counter = new ObjectCounter(); + SimpleScheduler.getInstance().addPeriodicEvent(new Cleaner(), CLEAN_TIME); + } + + /** + * increments before checking + * @param key non-null + * @param id null if for direct lookups + */ + boolean shouldThrottle(Hash key, TunnelId id) { + return this.counter.increment(new ReplyTunnel(key, id)) > MAX_LOOKUPS; + } + + private class Cleaner implements SimpleTimer.TimedEvent { + public void timeReached() { + LookupThrottler.this.counter.clear(); + } + } + + /** yes, we could have a two-level lookup, or just do h.tostring() + id.tostring() */ + private static class ReplyTunnel { + public Hash h; + public TunnelId id; + + ReplyTunnel(Hash h, TunnelId id) { + this.h = h; + if (id != null) + this.id = id; + else + this.id = DUMMY_ID; + } + + @Override + public boolean equals(Object obj) { + return this.h.equals(((ReplyTunnel)obj).h) && + this.id.equals(((ReplyTunnel)obj).id); + } + + @Override + public int hashCode() { + return this.h.hashCode() + this.id.hashCode(); + } + } +} diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/PersistentDataStore.java b/router/java/src/net/i2p/router/networkdb/kademlia/PersistentDataStore.java index 16aa7dfb6..abc78b855 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/PersistentDataStore.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/PersistentDataStore.java @@ -411,6 +411,10 @@ class PersistentDataStore extends TransientDataStore { try { // persist = false so we don't write what we just read _facade.store(ri.getIdentity().getHash(), ri, false); + // when heardAbout() was removed from TransientDataStore, it broke + // profile bootstrapping for new routers, + // so add it here. + getContext().profileManager().heardAbout(ri.getIdentity().getHash(), ri.getPublished()); } catch (IllegalArgumentException iae) { _log.info("Refused locally loaded routerInfo - deleting"); corrupt = true; diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/RepublishLeaseSetJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/RepublishLeaseSetJob.java index 9f4dc9a37..223dd70f8 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/RepublishLeaseSetJob.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/RepublishLeaseSetJob.java @@ -36,7 +36,6 @@ public class RepublishLeaseSetJob extends JobImpl { _dest = destHash; _lastPublished = 0; //getTiming().setStartAfter(ctx.clock().now()+REPUBLISH_LEASESET_DELAY); - getContext().statManager().createRateStat("netDb.republishLeaseSetCount", "How often we republish a leaseSet?", "NetworkDatabase", new long[] { 5*60*1000l, 60*60*1000l, 24*60*60*1000l }); } public String getName() { return "Republish a local leaseSet"; } public void runJob() { diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/StoreJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/StoreJob.java index f93b35947..690f37b87 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/StoreJob.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/StoreJob.java @@ -73,12 +73,6 @@ class StoreJob extends JobImpl { DataStructure data, Job onSuccess, Job onFailure, long timeoutMs, Set toSkip) { super(context); _log = context.logManager().getLog(StoreJob.class); - getContext().statManager().createRateStat("netDb.storeRouterInfoSent", "How many routerInfo store messages have we sent?", "NetworkDatabase", new long[] { 5*60*1000l, 60*60*1000l, 24*60*60*1000l }); - getContext().statManager().createRateStat("netDb.storeLeaseSetSent", "How many leaseSet store messages have we sent?", "NetworkDatabase", new long[] { 5*60*1000l, 60*60*1000l, 24*60*60*1000l }); - getContext().statManager().createRateStat("netDb.storePeers", "How many peers each netDb must be sent to before success?", "NetworkDatabase", new long[] { 5*60*1000l, 60*60*1000l, 24*60*60*1000l }); - getContext().statManager().createRateStat("netDb.storeFailedPeers", "How many peers each netDb must be sent to before failing completely?", "NetworkDatabase", new long[] { 5*60*1000l, 60*60*1000l, 24*60*60*1000l }); - getContext().statManager().createRateStat("netDb.ackTime", "How long does it take for a peer to ack a netDb store?", "NetworkDatabase", new long[] { 5*60*1000l, 60*60*1000l, 24*60*60*1000l }); - getContext().statManager().createRateStat("netDb.replyTimeout", "How long after a netDb send does the timeout expire (when the peer doesn't reply in time)?", "NetworkDatabase", new long[] { 60*1000, 5*60*1000l, 60*60*1000l, 24*60*60*1000l }); _facade = facade; _state = new StoreState(getContext(), key, data, toSkip); _onSuccess = onSuccess; @@ -448,6 +442,11 @@ class StoreJob extends JobImpl { } else { sent = msg; _state.addPending(to); + // now that almost all floodfills are at 0.7.10, + // just refuse to store unencrypted to older ones. + _state.replyTimeout(to); + getContext().jobQueue().addJob(new WaitJob(getContext())); + return; } SendSuccessJob onReply = new SendSuccessJob(getContext(), peer, outTunnel, sent.getMessageSize()); 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 2e93cb3e0..f4b9ee430 100644 --- a/router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java +++ b/router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java @@ -17,6 +17,7 @@ import net.i2p.router.RouterContext; import net.i2p.util.EepGet; import net.i2p.util.I2PAppThread; import net.i2p.util.Log; +import net.i2p.util.SSLEepGet; /** * Moved from ReseedHandler in routerconsole. See ReseedChecker for additional comments. @@ -34,10 +35,12 @@ public class Reseeder { // Reject unreasonably big files, because we download into a ByteArrayOutputStream. private static final long MAX_RESEED_RESPONSE_SIZE = 8 * 1024 * 1024; - private static final String DEFAULT_SEED_URL = "http://netdb.i2p2.de/,http://b.netdb.i2p2.de/,http://reseed.i2p-projekt.de/"; + private static final String DEFAULT_SEED_URL = "http://a.netdb.i2p2.de/,http://b.netdb.i2p2.de/,http://reseed.i2p-projekt.de/"; private static final String PROP_INPROGRESS = "net.i2p.router.web.ReseedHandler.reseedInProgress"; private static final String PROP_ERROR = "net.i2p.router.web.ReseedHandler.errorMessage"; private static final String PROP_STATUS = "net.i2p.router.web.ReseedHandler.statusMessage"; + public static final String PROP_PROXY_HOST = "router.reseedProxyHost"; + public static final String PROP_PROXY_PORT = "router.reseedProxyPort"; public Reseeder(RouterContext ctx) { _context = ctx; @@ -63,6 +66,8 @@ public class Reseeder { /** Todo: translate the messages sent via PROP_STATUS */ public class ReseedRunner implements Runnable, EepGet.StatusListener { private boolean _isRunning; + private String _proxyHost; + private int _proxyPort; public ReseedRunner() { _isRunning = false; @@ -71,6 +76,8 @@ public class Reseeder { public boolean isRunning() { return _isRunning; } public void run() { _isRunning = true; + _proxyHost = _context.getProperty(PROP_PROXY_HOST); + _proxyPort = _context.getProperty(PROP_PROXY_PORT, -1); System.out.println("Reseed start"); reseed(false); System.out.println("Reseed complete"); @@ -237,9 +244,15 @@ public class Reseeder { private byte[] readURL(URL url) throws Exception { ByteArrayOutputStream baos = new ByteArrayOutputStream(4*1024); - // Do a non-proxied eepget into our ByteArrayOutputStream with 0 retries - EepGet get = new EepGet( I2PAppContext.getGlobalContext(), false, null, -1, 0, 0, MAX_RESEED_RESPONSE_SIZE, - null, baos, url.toString(), false, null, null); + EepGet get; + if (url.toString().startsWith("https")) { + get = new SSLEepGet(I2PAppContext.getGlobalContext(), baos, url.toString()); + } else { + // Do a (probably) non-proxied eepget into our ByteArrayOutputStream with 0 retries + boolean shouldProxy = _proxyHost != null && _proxyHost.length() > 0 && _proxyPort > 0; + get = new EepGet(I2PAppContext.getGlobalContext(), shouldProxy, _proxyHost, _proxyPort, 0, 0, MAX_RESEED_RESPONSE_SIZE, + null, baos, url.toString(), false, null, null); + } get.addStatusListener(ReseedRunner.this); if (get.fetch()) return baos.toByteArray(); else return null; } diff --git a/router/java/src/net/i2p/router/peermanager/ProfileManagerImpl.java b/router/java/src/net/i2p/router/peermanager/ProfileManagerImpl.java index 69088caaa..712a3cba6 100644 --- a/router/java/src/net/i2p/router/peermanager/ProfileManagerImpl.java +++ b/router/java/src/net/i2p/router/peermanager/ProfileManagerImpl.java @@ -311,6 +311,17 @@ public class ProfileManagerImpl implements ProfileManager { if (data == null) return; data.setLastHeardAbout(_context.clock().now()); } + + /** + * Note that the local router received a reference to the given peer + * at a certain time. Only update the time if newer. + */ + public void heardAbout(Hash peer, long when) { + PeerProfile data = getProfile(peer); + if (data == null) return; + if (when > data.getLastHeardAbout()) + data.setLastHeardAbout(when); + } /** * Note that the router received a message from the given peer on the specified diff --git a/router/java/src/net/i2p/router/startup/ClientAppConfig.java b/router/java/src/net/i2p/router/startup/ClientAppConfig.java index af2c3101e..54342a895 100644 --- a/router/java/src/net/i2p/router/startup/ClientAppConfig.java +++ b/router/java/src/net/i2p/router/startup/ClientAppConfig.java @@ -70,9 +70,9 @@ public class ClientAppConfig { /* * Go through the properties, and return a List of ClientAppConfig structures */ - public static List getClientApps(RouterContext ctx) { + public static List getClientApps(RouterContext ctx) { Properties clientApps = getClientAppProps(ctx); - List rv = new ArrayList(5); + List rv = new ArrayList(8); int i = 0; while (true) { String className = clientApps.getProperty(PREFIX + i + ".main"); diff --git a/router/java/src/net/i2p/router/startup/CreateRouterInfoJob.java b/router/java/src/net/i2p/router/startup/CreateRouterInfoJob.java index 979cefa78..5fbce84cd 100644 --- a/router/java/src/net/i2p/router/startup/CreateRouterInfoJob.java +++ b/router/java/src/net/i2p/router/startup/CreateRouterInfoJob.java @@ -56,7 +56,8 @@ public class CreateRouterInfoJob extends JobImpl { stats.setProperty(RouterInfo.PROP_NETWORK_ID, Router.NETWORK_ID+""); getContext().router().addCapabilities(info); info.setOptions(stats); - info.setPeers(new HashSet()); + // not necessary, in constructor + //info.setPeers(new HashSet()); info.setPublished(getCurrentPublishDate(getContext())); RouterIdentity ident = new RouterIdentity(); Certificate cert = getContext().router().createCertificate(); diff --git a/router/java/src/net/i2p/router/startup/WorkingDir.java b/router/java/src/net/i2p/router/startup/WorkingDir.java index 5110c02e5..545239777 100644 --- a/router/java/src/net/i2p/router/startup/WorkingDir.java +++ b/router/java/src/net/i2p/router/startup/WorkingDir.java @@ -47,6 +47,9 @@ public class WorkingDir { private final static String PROP_WORKING_DIR = "i2p.dir.config"; private final static String WORKING_DIR_DEFAULT_WINDOWS = "I2P"; private final static String WORKING_DIR_DEFAULT = ".i2p"; + private final static String WORKING_DIR_DEFAULT_DAEMON = "i2p-config"; + /** we do a couple of things differently if this is the username */ + private final static String DAEMON_USER = "i2psvc"; /** * Only call this once on router invocation. @@ -70,7 +73,10 @@ public class WorkingDir { home = appdata; dirf = new File(home, WORKING_DIR_DEFAULT_WINDOWS); } else { - dirf = new File(home, WORKING_DIR_DEFAULT); + if (DAEMON_USER.equals(System.getProperty("user.name"))) + dirf = new File(home, WORKING_DIR_DEFAULT_DAEMON); + else + dirf = new File(home, WORKING_DIR_DEFAULT); } } @@ -194,11 +200,15 @@ public class WorkingDir { out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(newFile), "UTF-8"))); out.println("# Modified by I2P User dir migration script"); String s = null; + boolean isDaemon = DAEMON_USER.equals(System.getProperty("user.name")); while ((s = DataHelper.readLine(in)) != null) { if (s.endsWith("=\"eepsite/jetty.xml\"")) { s = s.replace("=\"eepsite/jetty.xml\"", "=\"" + todir.getAbsolutePath() + File.separatorChar + "eepsite" + File.separatorChar + "jetty.xml\""); + } else if (isDaemon && s.equals("clientApp.4.startOnLoad=true")) { + // disable browser launch for daemon + s = "clientApp.4.startOnLoad=false"; } out.println(s); } diff --git a/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java b/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java index f1460b9f7..b19662c85 100644 --- a/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java +++ b/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java @@ -77,7 +77,8 @@ public class CommSystemFacadeImpl extends CommSystemFacade { public boolean haveHighOutboundCapacity() { return (_manager == null ? false : _manager.haveHighOutboundCapacity()); } /** - * Framed average clock skew of connected peers in seconds, or the clock offset if we cannot answer. + * @param percentToInclude 1-100 + * @return Framed average clock skew of connected peers in seconds, or the clock offset if we cannot answer. * Average is calculated over the middle "percentToInclude" peers. */ @Override @@ -87,21 +88,23 @@ public class CommSystemFacadeImpl extends CommSystemFacade { return Long.valueOf(_context.clock().getOffset() / 1000); } Vector skews = _manager.getClockSkews(); - if (skews == null) { - return Long.valueOf(_context.clock().getOffset() / 1000); - } - if (skews.size() < 5) { + if (skews == null || + skews.size() <= 0 || + (skews.size() < 5 && _context.clock().getUpdatedSuccessfully())) { return Long.valueOf(_context.clock().getOffset() / 1000); } + // Going to calculate, sort them Collections.sort(skews); + if (_log.shouldLog(Log.DEBUG)) + _log.debug("Clock skews: " + skews); // Calculate frame size - int frameSize = Math.min((skews.size() * percentToInclude / 100), 2); + int frameSize = Math.max((skews.size() * percentToInclude / 100), 1); int first = (skews.size() / 2) - (frameSize / 2); - int last = (skews.size() / 2) + (frameSize / 2); + int last = Math.min((skews.size() / 2) + (frameSize / 2), skews.size() - 1); // Sum skew values long sum = 0; - for (int i = first; i < last; i++) { + for (int i = first; i <= last; i++) { long value = ((Long) (skews.get(i))).longValue(); if (_log.shouldLog(Log.DEBUG)) _log.debug("Adding clock skew " + i + " valued " + value + " s."); diff --git a/router/java/src/net/i2p/router/transport/ntcp/EstablishState.java b/router/java/src/net/i2p/router/transport/ntcp/EstablishState.java index 9cd5f1ad5..0749e8d6c 100644 --- a/router/java/src/net/i2p/router/transport/ntcp/EstablishState.java +++ b/router/java/src/net/i2p/router/transport/ntcp/EstablishState.java @@ -365,12 +365,20 @@ public class EstablishState { // the skew is not authenticated yet, but it is certainly fatal to // the establishment, so fail hard if appropriate long diff = 1000*Math.abs(_tsA-_tsB); - if (diff >= Router.CLOCK_FUDGE_FACTOR) { + if (!_context.clock().getUpdatedSuccessfully()) { + // Adjust the clock one time in desperation + _context.clock().setOffset(1000 * (_tsB - _tsA), true); + _tsA = _tsB; + if (diff != 0) + _log.error("NTP failure, NTCP adjusting clock by " + DataHelper.formatDuration(diff)); + } else if (diff >= Router.CLOCK_FUDGE_FACTOR) { _context.statManager().addRateData("ntcp.invalidOutboundSkew", diff, 0); _transport.markReachable(_con.getRemotePeer().calculateHash(), false); + // Only shitlist if we know what time it is _context.shitlist().shitlistRouter(DataHelper.formatDuration(diff), _con.getRemotePeer().calculateHash(), _x("Excessive clock skew: {0}")); + _transport.setLastBadSkew(_tsA- _tsB); fail("Clocks too skewed (" + diff + " ms)", null, true); return; } else if (_log.shouldLog(Log.DEBUG)) { @@ -570,12 +578,21 @@ public class EstablishState { _log.debug(prefix() + "verification successful for " + _con); long diff = 1000*Math.abs(tsA-_tsB); - if (diff >= Router.CLOCK_FUDGE_FACTOR) { + if (!_context.clock().getUpdatedSuccessfully()) { + // Adjust the clock one time in desperation + // This isn't very likely, outbound will do it first + _context.clock().setOffset(1000 * (_tsB - tsA), true); + tsA = _tsB; + if (diff != 0) + _log.error("NTP failure, NTCP adjusting clock by " + DataHelper.formatDuration(diff)); + } else if (diff >= Router.CLOCK_FUDGE_FACTOR) { _context.statManager().addRateData("ntcp.invalidInboundSkew", diff, 0); _transport.markReachable(alice.calculateHash(), true); + // Only shitlist if we know what time it is _context.shitlist().shitlistRouter(DataHelper.formatDuration(diff), alice.calculateHash(), _x("Excessive clock skew: {0}")); + _transport.setLastBadSkew(tsA- _tsB); fail("Clocks too skewed (" + diff + " ms)", null, true); return; } else if (_log.shouldLog(Log.DEBUG)) { diff --git a/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java b/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java index 89c12250c..82ec5719e 100644 --- a/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java +++ b/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java @@ -418,6 +418,8 @@ public class EventPumper implements Runnable { try { chan.close(); } catch (IOException ioe) { } return; } + // BUGFIX for firewalls. --Sponge + chan.socket().setKeepAlive(true); SelectionKey ckey = chan.register(_selector, SelectionKey.OP_READ); NTCPConnection con = new NTCPConnection(_context, _transport, chan, ckey); @@ -436,6 +438,8 @@ public class EventPumper implements Runnable { if (_log.shouldLog(Log.DEBUG)) _log.debug("processing connect for " + key + " / " + con + ": connected? " + connected); if (connected) { + // BUGFIX for firewalls. --Sponge + chan.socket().setKeepAlive(true); con.setKey(key); con.outboundConnected(); _context.statManager().addRateData("ntcp.connectSuccessful", 1, 0); 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 743acf17a..41ad29e23 100644 --- a/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java +++ b/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java @@ -53,6 +53,7 @@ public class NTCPTransport extends TransportImpl { private List _sent; private NTCPSendFinisher _finisher; + private long _lastBadSkew; private static final long[] RATES = { 10*60*1000 }; public NTCPTransport(RouterContext ctx) { @@ -382,24 +383,36 @@ public class NTCPTransport extends TransportImpl { return active; } + /** @param skew in seconds */ + void setLastBadSkew(long skew) { + _lastBadSkew = skew; + } + /** * Return our peer clock skews on this transport. * Vector composed of Long, each element representing a peer skew in seconds. */ @Override - public Vector getClockSkews() { + public Vector getClockSkews() { - Vector peers = new Vector(); - Vector skews = new Vector(); + Vector peers = new Vector(); + Vector skews = new Vector(); synchronized (_conLock) { peers.addAll(_conByIdent.values()); } - for (Iterator iter = peers.iterator(); iter.hasNext(); ) { - NTCPConnection con = (NTCPConnection)iter.next(); - skews.addElement(new Long (con.getClockSkew())); + for (Iterator iter = peers.iterator(); iter.hasNext(); ) { + NTCPConnection con = iter.next(); + if (con.isEstablished()) + skews.addElement(Long.valueOf(con.getClockSkew())); } + + // If we don't have many peers, maybe it is because of a bad clock, so + // return the last bad skew we got + if (skews.size() < 5 && _lastBadSkew != 0) + skews.addElement(Long.valueOf(_lastBadSkew)); + if (_log.shouldLog(Log.DEBUG)) _log.debug("NTCP transport returning " + skews.size() + " peer clock skews."); return skews; diff --git a/router/java/src/net/i2p/router/transport/udp/PacketHandler.java b/router/java/src/net/i2p/router/transport/udp/PacketHandler.java index 8edcc5def..e32530809 100644 --- a/router/java/src/net/i2p/router/transport/udp/PacketHandler.java +++ b/router/java/src/net/i2p/router/transport/udp/PacketHandler.java @@ -6,6 +6,7 @@ import java.util.List; import net.i2p.router.Router; import net.i2p.router.RouterContext; +import net.i2p.data.DataHelper; import net.i2p.util.I2PThread; import net.i2p.util.Log; @@ -417,26 +418,36 @@ public class PacketHandler { long recvOn = packet.getBegin(); long sendOn = reader.readTimestamp() * 1000; long skew = recvOn - sendOn; + + // update skew whether or not we will be dropping the packet for excessive skew + if (state != null) { + if (_log.shouldLog(Log.DEBUG)) + _log.debug("Received packet from " + state.getRemoteHostId().toString() + " with skew " + skew); + state.adjustClockSkew(skew); + } + _context.statManager().addRateData("udp.receivePacketSkew", skew, packet.getLifetime()); + + if (!_context.clock().getUpdatedSuccessfully()) { + // adjust the clock one time in desperation + // this doesn't seem to work for big skews, we never get anything back, + // so we have to wait for NTCP to do it + _context.clock().setOffset(0 - skew, true); + if (skew != 0) + _log.error("NTP failure, UDP adjusting clock by " + DataHelper.formatDuration(Math.abs(skew))); + } + if (skew > GRACE_PERIOD) { if (_log.shouldLog(Log.WARN)) - _log.warn("Packet too far in the past: " + new Date(sendOn/1000) + ": " + packet); + _log.warn("Packet too far in the past: " + new Date(sendOn) + ": " + packet); _context.statManager().addRateData("udp.droppedInvalidSkew", skew, packet.getExpiration()); return; } else if (skew < 0 - GRACE_PERIOD) { if (_log.shouldLog(Log.WARN)) - _log.warn("Packet too far in the future: " + new Date(sendOn/1000) + ": " + packet); + _log.warn("Packet too far in the future: " + new Date(sendOn) + ": " + packet); _context.statManager().addRateData("udp.droppedInvalidSkew", 0-skew, packet.getExpiration()); return; } - if (state != null) { - if (_log.shouldLog(Log.DEBUG)) - _log.debug("Received packet from " + state.getRemoteHostId().toString() + " with skew " + skew); - state.adjustClockSkew((short)skew); - } - - _context.statManager().addRateData("udp.receivePacketSkew", skew, packet.getLifetime()); - //InetAddress fromHost = packet.getPacket().getAddress(); //int fromPort = packet.getPacket().getPort(); //RemoteHostId from = new RemoteHostId(fromHost.getAddress(), fromPort); diff --git a/router/java/src/net/i2p/router/transport/udp/PeerState.java b/router/java/src/net/i2p/router/transport/udp/PeerState.java index 050d87d4d..f36e2d95c 100644 --- a/router/java/src/net/i2p/router/transport/udp/PeerState.java +++ b/router/java/src/net/i2p/router/transport/udp/PeerState.java @@ -59,8 +59,8 @@ public class PeerState { private boolean _rekeyBeganLocally; /** when were the current cipher and MAC keys established/rekeyed? */ private long _keyEstablishedTime; - /** how far off is the remote peer from our clock, in seconds? */ - private short _clockSkew; + /** how far off is the remote peer from our clock, in milliseconds? */ + private long _clockSkew; /** what is the current receive second, for congestion control? */ private long _currentReceiveSecond; /** when did we last send them a packet? */ @@ -327,8 +327,8 @@ public class PeerState { public boolean getRekeyBeganLocally() { return _rekeyBeganLocally; } /** when were the current cipher and MAC keys established/rekeyed? */ public long getKeyEstablishedTime() { return _keyEstablishedTime; } - /** how far off is the remote peer from our clock, in seconds? */ - public short getClockSkew() { return ( (short) (_clockSkew / 1000)); } + /** how far off is the remote peer from our clock, in milliseconds? */ + public long getClockSkew() { return _clockSkew ; } /** what is the current receive second, for congestion control? */ public long getCurrentReceiveSecond() { return _currentReceiveSecond; } /** when did we last send them a packet? */ @@ -425,9 +425,9 @@ public class PeerState { public void setRekeyBeganLocally(boolean local) { _rekeyBeganLocally = local; } /** when were the current cipher and MAC keys established/rekeyed? */ public void setKeyEstablishedTime(long when) { _keyEstablishedTime = when; } - /** how far off is the remote peer from our clock, in seconds? */ - public void adjustClockSkew(short skew) { - _clockSkew = (short)(0.9*(float)_clockSkew + 0.1*(float)skew); + /** how far off is the remote peer from our clock, in milliseconds? */ + public void adjustClockSkew(long skew) { + _clockSkew = (long) (0.9*(float)_clockSkew + 0.1*(float)skew); } /** what is the current receive second, for congestion control? */ public void setCurrentReceiveSecond(long sec) { _currentReceiveSecond = sec; } diff --git a/router/java/src/net/i2p/router/transport/udp/UDPPacketReader.java b/router/java/src/net/i2p/router/transport/udp/UDPPacketReader.java index 9bb665f6b..efb85ac48 100644 --- a/router/java/src/net/i2p/router/transport/udp/UDPPacketReader.java +++ b/router/java/src/net/i2p/router/transport/udp/UDPPacketReader.java @@ -74,6 +74,7 @@ public class UDPPacketReader { return (_message[_payloadBeginOffset] & (1 << 2)) != 0; } + /** @return seconds */ public long readTimestamp() { return DataHelper.fromLong(_message, _payloadBeginOffset + 1, 4); } 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 075326c53..4f0e788e4 100644 --- a/router/java/src/net/i2p/router/transport/udp/UDPTransport.java +++ b/router/java/src/net/i2p/router/transport/udp/UDPTransport.java @@ -42,9 +42,9 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority private Log _log; private UDPEndpoint _endpoint; /** Peer (Hash) to PeerState */ - private final Map _peersByIdent; + private final Map _peersByIdent; /** RemoteHostId to PeerState */ - private final Map _peersByRemoteHost; + private final Map _peersByRemoteHost; private PacketHandler _handler; private EstablishmentManager _establisher; private MessageQueue _outboundMessages; @@ -575,7 +575,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority */ PeerState getPeerState(RemoteHostId hostInfo) { synchronized (_peersByRemoteHost) { - return (PeerState)_peersByRemoteHost.get(hostInfo); + return _peersByRemoteHost.get(hostInfo); } } @@ -585,7 +585,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority */ public PeerState getPeerState(Hash remotePeer) { synchronized (_peersByIdent) { - return (PeerState)_peersByIdent.get(remotePeer); + return _peersByIdent.get(remotePeer); } } @@ -664,7 +664,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority PeerState oldPeer = null; if (remotePeer != null) { synchronized (_peersByIdent) { - oldPeer = (PeerState)_peersByIdent.put(remotePeer, peer); + oldPeer = _peersByIdent.put(remotePeer, peer); if ( (oldPeer != null) && (oldPeer != peer) ) { // transfer over the old state/inbound message fragments/etc peer.loadFrom(oldPeer); @@ -684,7 +684,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority if (remoteId == null) return false; synchronized (_peersByRemoteHost) { - oldPeer = (PeerState)_peersByRemoteHost.put(remoteId, peer); + oldPeer = _peersByRemoteHost.put(remoteId, peer); if ( (oldPeer != null) && (oldPeer != peer) ) { // transfer over the old state/inbound message fragments/etc peer.loadFrom(oldPeer); @@ -883,14 +883,14 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority long now = _context.clock().now(); _context.statManager().addRateData("udp.droppedPeer", now - peer.getLastReceiveTime(), now - peer.getKeyEstablishedTime()); synchronized (_peersByIdent) { - altByIdent = (PeerState)_peersByIdent.remove(peer.getRemotePeer()); + altByIdent = _peersByIdent.remove(peer.getRemotePeer()); } } RemoteHostId remoteId = peer.getRemoteHostId(); if (remoteId != null) { synchronized (_peersByRemoteHost) { - altByHost = (PeerState)_peersByRemoteHost.remove(remoteId); + altByHost = _peersByRemoteHost.remove(remoteId); } } @@ -1417,8 +1417,8 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority int active = 0; int inactive = 0; synchronized (_peersByIdent) { - for (Iterator iter = _peersByIdent.values().iterator(); iter.hasNext(); ) { - PeerState peer = (PeerState)iter.next(); + for (Iterator iter = _peersByIdent.values().iterator(); iter.hasNext(); ) { + PeerState peer = iter.next(); if (now-peer.getLastReceiveTime() > 5*60*1000) inactive++; else @@ -1434,8 +1434,8 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority int active = 0; int inactive = 0; synchronized (_peersByIdent) { - for (Iterator iter = _peersByIdent.values().iterator(); iter.hasNext(); ) { - PeerState peer = (PeerState)iter.next(); + for (Iterator iter = _peersByIdent.values().iterator(); iter.hasNext(); ) { + PeerState peer = iter.next(); if (now-peer.getLastSendFullyTime() > 1*60*1000) inactive++; else @@ -1461,20 +1461,24 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority * Vector composed of Long, each element representing a peer skew in seconds. */ @Override - public Vector getClockSkews() { + public Vector getClockSkews() { - Vector skews = new Vector(); - Vector peers = new Vector(); + Vector skews = new Vector(); + Vector peers = new Vector(); synchronized (_peersByIdent) { peers.addAll(_peersByIdent.values()); } + // If our clock is way off, we may not have many (or any) successful connections, + // so try hard in that case to return good data + boolean includeEverybody = _context.router().getUptime() < 10*60*1000 || peers.size() < 10; long now = _context.clock().now(); - for (Iterator iter = peers.iterator(); iter.hasNext(); ) { - PeerState peer = (PeerState)iter.next(); - if (now-peer.getLastReceiveTime() > 60*60*1000) continue; // skip old peers - skews.addElement(new Long (peer.getClockSkew())); + for (Iterator iter = peers.iterator(); iter.hasNext(); ) { + PeerState peer = iter.next(); + if ((!includeEverybody) && now - peer.getLastReceiveTime() > 15*60*1000) + continue; // skip old peers + skews.addElement(Long.valueOf(peer.getClockSkew() / 1000)); } if (_log.shouldLog(Log.DEBUG)) _log.debug("UDP transport returning " + skews.size() + " peer clock skews."); @@ -1813,7 +1817,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority public void renderStatusHTML(Writer out, int sortFlags) throws IOException {} @Override public void renderStatusHTML(Writer out, String urlBase, int sortFlags) throws IOException { - TreeSet peers = new TreeSet(getComparator(sortFlags)); + TreeSet peers = new TreeSet(getComparator(sortFlags)); synchronized (_peersByIdent) { peers.addAll(_peersByIdent.values()); } @@ -1958,7 +1962,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority buf.append(""); buf.append(" "); - buf.append(peer.getClockSkew()); + buf.append(peer.getClockSkew() / 1000); buf.append("s"); offsetTotal = offsetTotal + peer.getClockSkew(); @@ -2055,7 +2059,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority buf.append(formatKBps(bpsIn)).append("/").append(formatKBps(bpsOut)); buf.append("K/s
        "); buf.append(" ").append(numPeers > 0 ? DataHelper.formatDuration(uptimeMsTotal/numPeers) : "0s"); - buf.append(" ").append(numPeers > 0 ? DataHelper.formatDuration(offsetTotal*1000/numPeers) : "0ms").append("\n"); + buf.append(" ").append(numPeers > 0 ? DataHelper.formatDuration(offsetTotal/numPeers) : "0ms").append("\n"); buf.append(" "); buf.append(numPeers > 0 ? cwinTotal/(numPeers*1024) + "K" : "0K"); buf.append("  \n"); @@ -2276,13 +2280,13 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority } PeerState pickTestPeer(RemoteHostId dontInclude) { - List peers = null; + List peers = null; synchronized (_peersByIdent) { peers = new ArrayList(_peersByIdent.values()); } Collections.shuffle(peers, _context.random()); for (int i = 0; i < peers.size(); i++) { - PeerState peer = (PeerState)peers.get(i); + PeerState peer = peers.get(i); if ( (dontInclude != null) && (dontInclude.equals(peer.getRemoteHostId())) ) continue; RouterInfo peerInfo = _context.netDb().lookupRouterInfoLocally(peer.getRemotePeer()); diff --git a/router/java/src/net/i2p/router/tunnel/pool/TunnelPool.java b/router/java/src/net/i2p/router/tunnel/pool/TunnelPool.java index 965d113f1..d116431a4 100644 --- a/router/java/src/net/i2p/router/tunnel/pool/TunnelPool.java +++ b/router/java/src/net/i2p/router/tunnel/pool/TunnelPool.java @@ -260,6 +260,7 @@ public class TunnelPool { /** list of tunnelInfo instances of tunnels currently being built */ public List listPending() { synchronized (_inProgress) { return new ArrayList(_inProgress); } } + /** duplicate of size(), let's pick one */ int getTunnelCount() { synchronized (_tunnels) { return _tunnels.size(); } } public TunnelPoolSettings getSettings() { return _settings; } @@ -273,6 +274,7 @@ public class TunnelPool { } public TunnelPeerSelector getSelector() { return _peerSelector; } public boolean isAlive() { return _alive; } + /** duplicate of getTunnelCount(), let's pick one */ public int size() { synchronized (_tunnels) { return _tunnels.size(); diff --git a/router/java/src/net/i2p/router/tunnel/pool/TunnelPoolManager.java b/router/java/src/net/i2p/router/tunnel/pool/TunnelPoolManager.java index bbee14a48..fbb2bc77f 100644 --- a/router/java/src/net/i2p/router/tunnel/pool/TunnelPoolManager.java +++ b/router/java/src/net/i2p/router/tunnel/pool/TunnelPoolManager.java @@ -193,6 +193,29 @@ public class TunnelPoolManager implements TunnelManagerFacade { public int getParticipatingCount() { return _context.tunnelDispatcher().getParticipatingCount(); } public long getLastParticipatingExpiration() { return _context.tunnelDispatcher().getLastParticipatingExpiration(); } + /** + * @return (number of part. tunnels) / (estimated total number of hops in our expl.+client tunnels) + * 100 max. + * We just use length setting, not variance, for speed + * @since 0.7.10 + */ + public double getShareRatio() { + int part = getParticipatingCount(); + if (part <= 0) + return 0d; + List pools = new ArrayList(); + listPools(pools); + int count = 0; + for (int i = 0; i < pools.size(); i++) { + TunnelPool pool = pools.get(i); + count += pool.size() * pool.getSettings().getLength(); + } + if (count <= 0) + return 100d; + return Math.min(part / (double) count, 100d); + } + + public boolean isValidTunnel(Hash client, TunnelInfo tunnel) { if (tunnel.getExpiration() < _context.clock().now()) return false; diff --git a/router/java/src/net/i2p/data/i2np/DateMessage.java b/router/java/test/net/i2p/data/i2np/DateMessage.java similarity index 100% rename from router/java/src/net/i2p/data/i2np/DateMessage.java rename to router/java/test/net/i2p/data/i2np/DateMessage.java diff --git a/router/java/test/net/i2p/router/networkdb/kademlia/RouterGenerator.java b/router/java/test/net/i2p/router/networkdb/kademlia/RouterGenerator.java index b50168a3d..468ec4e05 100644 --- a/router/java/test/net/i2p/router/networkdb/kademlia/RouterGenerator.java +++ b/router/java/test/net/i2p/router/networkdb/kademlia/RouterGenerator.java @@ -92,8 +92,9 @@ public class RouterGenerator { RouterInfo info = new RouterInfo(); try { info.setAddresses(createAddresses(num)); - info.setOptions(new Properties()); - info.setPeers(new HashSet()); + // not necessary, in constructor + //info.setOptions(new Properties()); + //info.setPeers(new HashSet()); info.setPublished(Clock.getInstance().now()); RouterIdentity ident = new RouterIdentity(); BigInteger bv = new BigInteger(""+num);