merge of '2640744244f35bbe1cfa2738209238b69696c3aa'

and 'a9276b7c162ada9a117bde0a54aa4da8fdc05773'
This commit is contained in:
dev
2011-02-17 10:45:49 +00:00
16 changed files with 675 additions and 524 deletions

View File

@ -39,6 +39,7 @@ trans.zh_CN = apps/i2psnark/locale/messages_zh.po
source_file = apps/desktopgui/locale/messages_en.po
source_lang = en
trans.nl = apps/desktopgui/locale/messages_nl.po
trans.ru = apps/desktopgui/locale/messages_ru.po
trans.zh_CN = apps/desktopgui/locale/messages_zh.po
[main]

View File

@ -0,0 +1,45 @@
# I2P
# Copyright (C) 2009 The I2P Project
# This file is distributed under the same license as the desktopgui package.
# To contribute translations, see http://www.i2p2.de/newdevelopers
# foo <foo@bar>, 2009.
#
msgid ""
msgstr ""
"Project-Id-Version: I2P desktopgui\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-02-14 18:14+0000\n"
"PO-Revision-Date: 2011-02-15 00:18+0500\n"
"Last-Translator: Hidden Z <hiddenz@mail.i2p>\n"
"Language-Team: duck <duck@mail.i2p>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
msgid "Start I2P"
msgstr "Запустить I2P"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
msgid "I2P is starting!"
msgstr "I2P запускается!"
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
#, fuzzy
msgid "Starting"
msgstr "Запускается"
#: src/net/i2p/desktopgui/InternalTrayManager.java:25
msgid "Launch I2P Browser"
msgstr "Запустить I2P браузер"
#: src/net/i2p/desktopgui/InternalTrayManager.java:49
msgid "Restart I2P"
msgstr "Перезапустить I2P"
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
msgid "Stop I2P"
msgstr "Остановить I2P"

View File

@ -56,9 +56,10 @@ public class Main {
*/
public static void beginStartup(String[] args) {
try {
String headless = RouterManager.getRouterContext().getProperty("router.isHeadless");
String headless = System.getProperty("java.awt.headless");
boolean isHeadless = Boolean.parseBoolean(headless);
if(isHeadless) {
log.warn("Headless environment: not starting desktopgui!");
return;
}
}

View File

@ -857,20 +857,53 @@ public class I2PSnarkServlet extends Default {
out.write("<td class=\"center " + rowClass + "\">");
out.write(statusString + "</td>\n\t");
// (i) icon column
out.write("<td class=\"" + rowClass + "\">");
if (isValid && meta.getAnnounce() != null) {
// Link to local details page - note that trailing slash on a single-file torrent
// gets us to the details page instead of the file.
//StringBuilder buf = new StringBuilder(128);
//buf.append("<a href=\"").append(snark.getBaseName())
// .append("/\" title=\"").append(_("Torrent details"))
// .append("\"><img alt=\"").append(_("Info")).append("\" border=\"0\" src=\"")
// .append(_imgPath).append("details.png\"></a>");
//out.write(buf.toString());
// Link to tracker details page
String trackerLink = getTrackerLink(meta.getAnnounce(), snark.getInfoHash());
if (trackerLink != null)
out.write(trackerLink);
}
// File type icon column
out.write("</td>\n<td class=\"" + rowClass + "\">");
if (isValid) {
// Link to local details page - note that trailing slash on a single-file torrent
// gets us to the details page instead of the file.
StringBuilder buf = new StringBuilder(128);
buf.append("<a href=\"").append(snark.getBaseName())
.append("/\" title=\"").append(_("Torrent details"))
.append("\"><img alt=\"").append(_("Info")).append("\" border=\"0\" src=\"")
.append(_imgPath).append("details.png\"></a>");
out.write(buf.toString());
.append("\">");
out.write(buf.toString());
}
String icon;
if (isMultiFile)
icon = "folder";
else if (isValid)
icon = toIcon(meta.getName());
else
icon = "magnet";
if (isValid) {
out.write(toImg(icon, _("Info")));
out.write("</a>");
} else {
out.write(toImg(icon));
}
out.write("</td>\n<td class=\"" + rowClass + "\">");
StringBuilder buf = null;
// Torrent name column
out.write("</td><td class=\"snarkTorrentName " + rowClass + "\">");
if (remaining == 0 || isMultiFile) {
buf = new StringBuilder(128);
StringBuilder buf = new StringBuilder(128);
buf.append("<a href=\"").append(snark.getBaseName());
if (isMultiFile)
buf.append('/');
@ -882,22 +915,6 @@ public class I2PSnarkServlet extends Default {
buf.append("\">");
out.write(buf.toString());
}
String icon;
if (isMultiFile)
icon = "folder";
else if (isValid)
icon = toIcon(meta.getName());
else
icon = "magnet";
if (remaining == 0 || isMultiFile) {
out.write(toImg(icon, _("Open")));
out.write("</a>");
} else {
out.write(toImg(icon));
}
out.write("</td><td class=\"snarkTorrentName " + rowClass + "\">");
if (remaining == 0 || isMultiFile)
out.write(buf.toString());
out.write(filename);
if (remaining == 0 || isMultiFile)
out.write("</a>");
@ -1169,7 +1186,7 @@ public class I2PSnarkServlet extends Default {
out.write(_("From URL"));
out.write(":<td><input type=\"text\" name=\"newURL\" size=\"85\" value=\"" + newURL + "\"");
out.write("title=\"");
out.write(_("Torrent file must originate from an I2P-based tracker"));
out.write(_("Enter the torrent file download URL (I2P only), magnet link, or maggot link"));
out.write("\"> \n");
// not supporting from file at the moment, since the file name passed isn't always absolute (so it may not resolve)
//out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>");

File diff suppressed because it is too large Load Diff

View File

@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: I2P i2ptunnel\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-01-17 18:54+0000\n"
"PO-Revision-Date: 2011-01-18 00:34+0500\n"
"POT-Creation-Date: 2011-02-14 18:14+0000\n"
"PO-Revision-Date: 2011-02-14 23:24+0500\n"
"Last-Translator: Hidden Z <hiddenz@mail.i2p>\n"
"Language-Team: foo <foo@bar>\n"
"Language: \n"
@ -32,81 +32,90 @@ msgstr "Jump-сервисы, которые, возможно, знают нуж
msgid "internal"
msgstr "внутренний"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:170
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:171
msgid "Invalid form submission, probably because you used the 'back' or 'reload' button on your browser. Please resubmit."
msgstr "Неправильно переданная форма, возможно вы использовали действие браузера \"назад\" или \"обновить\". Пожалуйста повторите попытку."
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:217
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:218
msgid "Configuration reloaded for all tunnels"
msgstr "Конфигурация для всех туннелей перечитана"
#. and give them something to look at in any case
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:229
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:230
msgid "Starting tunnel"
msgstr "Запуск туннеля"
#. and give them something to look at in any case
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:242
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:243
msgid "Stopping tunnel"
msgstr "Остановка туннеля"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:389
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:311
msgid "Configuration changes saved"
msgstr "Настройки сохранены"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:314
msgid "Failed to save configuration"
msgstr "Не удалось сохранить настройки"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:398
msgid "New Tunnel"
msgstr "Новый туннель"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:409
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:418
msgid "Standard client"
msgstr "Обычный клиент"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:410
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:419
msgid "HTTP client"
msgstr "HTTP-клиент"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:411
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:420
msgid "IRC client"
msgstr "IRC-клиент"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:412
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:421
msgid "Standard server"
msgstr "Обычный сервер"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:413
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:422
msgid "HTTP server"
msgstr "HTTP-сервер"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:414
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:423
msgid "SOCKS 4/4a/5 proxy"
msgstr "SOCKS 4/4a/5 прокси"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:415
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:424
msgid "SOCKS IRC proxy"
msgstr "SOCKS IRC прокси"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:416
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:425
msgid "CONNECT/SSL/HTTPS proxy"
msgstr "CONNECT/SSL/HTTPS прокси"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:417
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:426
msgid "IRC server"
msgstr "IRC-сервер"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:418
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:427
msgid "Streamr client"
msgstr "Streamr-клиент"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:419
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:428
msgid "Streamr server"
msgstr "Streamr-сервер"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:420
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:429
msgid "HTTP bidir"
msgstr "HTTP bidir (экспериментальный двунаправленный режим, инструкцию спрашивайте у sponge)"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:508
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:517
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:290
msgid "Host not set"
msgstr "Хост не задан"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:512
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:521
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:272
msgid "Port not set"
msgstr "Порт не задан"
@ -560,8 +569,8 @@ msgid "Access List"
msgstr "Список доступа"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:451
msgid "Inbound connection limits (0 to disable)"
msgstr "Ограничение входящих соединений (0 для отключения)"
msgid "Inbound connection limits (0=unlimited)"
msgstr "Ограничение входящих соединений (0=неограниченно)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:453
msgid "Per client"
@ -584,8 +593,8 @@ msgid "Total"
msgstr "Всего"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:475
msgid "Max concurrent connections (0 to disable)"
msgstr "Максимум одновременных соединений (0 для отключения)"
msgid "Max concurrent connections (0=unlimited)"
msgstr "Максимум одновременных соединений (0=неограниченно)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:493
msgid "New Certificate type"

View File

@ -55,50 +55,17 @@ public class RouterConsoleRunner {
private static final String DEFAULT_WEBAPPS_DIR = "./webapps/";
private static final String USAGE = "Bad RouterConsoleRunner arguments, check clientApp.0.args in your clients.config file! " +
"Usage: [[port host[,host]] [-s sslPort [host[,host]]] [webAppsDir]]";
private static final String PROP_HEADLESS = "router.isHeadless";
static {
System.setProperty("org.mortbay.http.Version.paranoid", "true");
//Check if we are in a headless environment, set properties accordingly
List<RouterContext> contexts = RouterContext.listContexts();
if(contexts != null && contexts.size() > 0) {
RouterContext context = contexts.get(0);
String headless = context.getProperty(PROP_HEADLESS);
if(headless == null) {
/*
* Let's check if we are in a headless environment.
* We do this by setting headless to false
* and trying to get the graphics environment.
* If this fails, we should be headless.
*/
System.setProperty("java.awt.headless", "false");
try {
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
ge.isHeadlessInstance();
context.setProperty(PROP_HEADLESS, "false");
}
catch(InternalError e) {
context.setProperty(PROP_HEADLESS, "true");
}
context.router().setConfigSetting(PROP_HEADLESS, context.getProperty(PROP_HEADLESS));
context.router().saveConfig();
context.router().shutdown(0);
}
boolean isHeadless = true;
try {
isHeadless = Boolean.parseBoolean(headless);
}
catch(Exception e) {
//Incorrect setting, let's choose headless for safety
isHeadless = true;
}
if(isHeadless) {
System.setProperty("java.awt.headless", "true");
}
else {
System.setProperty("java.awt.headless", "false");
}
String headless = "java.awt.headless";
if(GraphicsEnvironment.isHeadless()) {
System.setProperty(headless, "true");
}
else {
System.setProperty(headless, "false");
}
}
@ -359,13 +326,13 @@ public class RouterConsoleRunner {
}
try {
//TODO: move away from routerconsole into a separate application.
//ApplicationManager?
VersionComparator v = new VersionComparator();
if(v.compare(System.getProperty("java.runtime.version"), "1.6") >= 0) {
//TODO: move away from routerconsole into a separate application.
//ApplicationManager?
VersionComparator v = new VersionComparator();
if(v.compare(System.getProperty("java.runtime.version"), "1.6") >= 0) {
String[] args = new String[0];
net.i2p.desktopgui.Main.beginStartup(args);
}
net.i2p.desktopgui.Main.beginStartup(args);
}
} catch (Throwable t) {
t.printStackTrace();
}

View File

@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: I2P routerconsole\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-01-17 18:53+0000\n"
"PO-Revision-Date: 2011-01-18 01:19+0500\n"
"POT-Creation-Date: 2011-02-14 18:14+0000\n"
"PO-Revision-Date: 2011-02-14 23:21+0500\n"
"Last-Translator: Hidden Z <hiddenz@mail.i2p>\n"
"Language-Team: \n"
"Language: \n"
@ -84,21 +84,21 @@ msgstr[0] "{0} день"
msgstr[1] "{0} дней"
msgstr[2] "{0} дней"
#: ../../../router/java/src/net/i2p/router/Blocklist.java:126
#: ../../../router/java/src/net/i2p/router/Blocklist.java:122
#, java-format
msgid "Banned by router hash: {0}"
msgstr "Забанен по хэшу маршрутизатора: {0}"
#: ../../../router/java/src/net/i2p/router/Blocklist.java:128
#: ../../../router/java/src/net/i2p/router/Blocklist.java:124
msgid "Banned by router hash"
msgstr "Забанен по хэшу маршрутизатора"
#. Temporary reason, until the job finishes
#: ../../../router/java/src/net/i2p/router/Blocklist.java:673
#: ../../../router/java/src/net/i2p/router/Blocklist.java:669
msgid "IP banned"
msgstr "IP заблокирован"
#: ../../../router/java/src/net/i2p/router/Blocklist.java:743
#: ../../../router/java/src/net/i2p/router/Blocklist.java:739
#, java-format
msgid "IP banned by blocklist.txt entry {0}"
msgstr "IP заблокирован по записи в blocklist.txt: {0}"
@ -152,12 +152,12 @@ msgstr "Принимаем туннели"
msgid "Rejecting tunnels"
msgstr "Не принимаем туннели"
#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:98
#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:105
#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:20
msgid "Reseeding"
msgstr "Начальная загрузка"
#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:121
#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:128
#, java-format
msgid "Reseed fetched only 1 router."
msgid_plural "Reseed fetched only {0} routers."
@ -165,29 +165,29 @@ msgstr[0] "При начальной загрузке получены данн
msgstr[1] "При начальной загрузке получены данные только о {0} роутерах."
msgstr[2] "При начальной загрузке получены данные только о {0} роутерах."
#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:128
#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:135
msgid "Reseed failed."
msgstr "Попытка начальной загрузки провалилась."
#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:129
#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:136
#, java-format
msgid "See {0} for help."
msgstr "Смотрите {0} для помощи."
#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:130
#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:137
msgid "reseed configuration page"
msgstr "страница настройки начальной загрузки"
#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:231
#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:239
msgid "Reseeding: fetching seed URL."
msgstr "Производится начальная загрузка: загружается URL каталога маршрутизаторов."
#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:272
#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:281
#, java-format
msgid "Reseeding: fetching router info from seed URL ({0} successful, {1} errors)."
msgstr "Производится начальная загрузка: получение информации о маршрутизаторах ({0} удачно, {1} ошибок)."
#: ../../../router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java:513
#: ../../../router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java:512
msgid "NetDb entry"
msgstr "показать описание в NetDb"
@ -196,38 +196,38 @@ msgstr "показать описание в NetDb"
msgid "No transports (hidden or starting up?)"
msgstr "Нет транспортных протоколов (в скрытом режиме или запущен недавно?)"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:452
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:450
msgid "Unreachable on any transport"
msgstr "Недоступен по всем транспортным протоколам"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:501
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:499
msgid "Router Transport Addresses"
msgstr "Адреса транспортов маршрутизатора"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:506
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:504
#, java-format
msgid "{0} is used for outbound connections only"
msgstr "{0} используется только для исходящих соединений"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:520
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:518
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:123
msgid "Help"
msgstr "Справка"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:521
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:519
msgid "Your transport connection limits are automatically set based on your configured bandwidth."
msgstr "Лимиты транспортных соединений назначены автоматически на основе заданной вами пропускной способности."
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:523
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:521
msgid "To override these limits, add the settings i2np.ntcp.maxConnections=nnn and i2np.udp.maxConnections=nnn on the advanced configuration page."
msgstr "Для переопределения этих лимитов добавьте параметры i2np.ntcp.maxConnections=nnn и i2np.udp.maxConnections=nnn на странице расширенных настроек."
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:525
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:523
#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:257
msgid "Definitions"
msgstr "Условные обозначения"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:526
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:524
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:735
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1890
#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:24
@ -239,149 +239,149 @@ msgstr "Условные обозначения"
msgid "Peer"
msgstr "Пир"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:526
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:524
msgid "The remote peer, identified by router hash"
msgstr "Уникальный идентификатор пира (несколько начальных символов из хеша его маршрутизатора)"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:527
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:525
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:736
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1894
msgid "Dir"
msgstr "Направление"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:528
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:526
msgid "Inbound connection"
msgstr "Входящее соединение"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:530
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:528
msgid "Outbound connection"
msgstr "Исходящее соединение"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:532
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:530
msgid "They offered to introduce us (help other peers traverse our firewall)"
msgstr "Этот пир предлагает себя в качестве нашего посредника (для того, чтобы другие пиры могли соединяться с нами в обход нашего брандмауэра)"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:534
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:532
msgid "We offered to introduce them (help other peers traverse their firewall)"
msgstr "Мы предлагаем себя в качестве посредника для этого пира (для того, чтобы другие пиры могли соединяться с ним в обход его брандмауэра)"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:535
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:533
msgid "How long since a packet has been received / sent"
msgstr "Сколько прошло времени после приёма/передачи последнего пакета"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:535
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:533
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:737
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1895
msgid "Idle"
msgstr "Неактивен"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:536
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:534
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:738
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1900
#: ../java/src/net/i2p/router/web/TunnelRenderer.java:156
msgid "In/Out"
msgstr "Приём/Передача"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:536
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:534
msgid "The smoothed inbound / outbound transfer rate (KBytes per second)"
msgstr "Усреднённые скорости приёма / передачи (КБайт/сек) "
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:537
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:535
msgid "How long ago this connection was established"
msgstr "Время жизни соединения"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:537
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:535
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:739
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1905
msgid "Up"
msgstr "Подключен"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:538
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:536
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:740
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1907
msgid "Skew"
msgstr "Сдвиг"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:538
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:536
msgid "The difference between the peer's clock and your own"
msgstr "Разница хода часов между пиром и нами"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:539
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:537
msgid "The congestion window, which is how many bytes can be sent without an acknowledgement"
msgstr "<i>Congestion Window.</i> Окно насыщения — количество байт, которое мы можем послать до ожидания подтверждения"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:540
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:538
msgid "The number of sent messages awaiting acknowledgement"
msgstr "Количество отправленных сообщений ожидающих подтверждения"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:541
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:539
msgid "The maximum number of concurrent messages to send"
msgstr "Максимальное количество параллельно отправляемых сообщений"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:542
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:540
msgid "The number of pending sends which exceed congestion window"
msgstr "Количество ожидающих посылок превосходящих размер окна насыщения"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:543
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:541
msgid "The slow start threshold"
msgstr "<i>Slow Start Threshold.</i> Величина порога медленного старта"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:544
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:542
msgid "The round trip time in milliseconds"
msgstr "<i>Round-Trip Time.</i> Время между отправкой запроса и получением ответа (миллисекунды)"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:545
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:543
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1917
msgid "Dev"
msgstr "Отклонение"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:545
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:543
msgid "The standard deviation of the round trip time in milliseconds"
msgstr "Среднеквадратическое отклонение RTT (миллисекунды)"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:546
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:544
msgid "The retransmit timeout in milliseconds"
msgstr "<i>Retransmit Time-Out.</i> Время ожидания подтверждения перед повторной посылкой пакета (миллисекунды)"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:547
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:545
msgid "Current maximum send packet size / estimated maximum receive packet size (bytes)"
msgstr "<i>Maximum Transfer Unit.</i> Текущий максимальный размер исходящего пакета / максимальный размер принятого пакета (байт) "
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:548
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:546
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:741
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1924
msgid "TX"
msgstr "Передано"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:548
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:546
msgid "The total number of packets sent to the peer"
msgstr "Общее количество посланных пиру пакетов"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:549
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:547
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:742
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1926
msgid "RX"
msgstr "Принято"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:549
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:547
msgid "The total number of packets received from the peer"
msgstr "Общее количество принятых от пира пакетов"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:550
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:548
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1929
msgid "Dup TX"
msgstr "Повт. принято"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:550
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:548
msgid "The total number of packets retransmitted to the peer"
msgstr "Общее количество повторно посланных пиру пакетов"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:551
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:549
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1931
msgid "Dup RX"
msgstr "Повт. передано"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:551
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:549
msgid "The total number of duplicate packets received from the peer"
msgstr "Общее количество повторно принятых от пира пакетов"
@ -2184,79 +2184,51 @@ 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:335
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:323
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:337
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:325
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:355
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:343
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:323
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:325
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:363
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:351
msgid "View console on startup"
msgstr "Открывать веб-консоль при запуске I2P"
#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:117
#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:93
msgid "Console is to be shown on startup"
msgstr "Веб-консоль будет открываться при запуске I2P"
#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:118
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:365
#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:94
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:353
msgid "Do not view console on startup"
msgstr "Не открывать веб-консоль при запуске I2P"
#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:120
#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:96
msgid "Console is not to be shown on startup"
msgstr "Веб-консоль не будет открываться при запуске I2P"
#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:129
#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:105
msgid "Service installed"
msgstr "Служба установлена"
#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:131
#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:107
msgid "Warning: unable to install the service"
msgstr "Предупреждение: не удалось установить службу"
#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:137
#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:113
msgid "Service removed"
msgstr "Служба удалена"
#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:139
#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:115
msgid "Warning: unable to remove the service"
msgstr "Предупреждение: не удалось удалить службу"
@ -2500,7 +2472,7 @@ msgstr "Строить график средних значений"
#: ../java/src/net/i2p/router/web/GraphHelper.java:152
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:417
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:333
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:321
msgid "or"
msgstr "или"
@ -2768,127 +2740,127 @@ msgstr "Загружается плагин"
msgid "{0}B transferred"
msgstr "{0} байт скачано"
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:152
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:153
msgid "Plugin downloaded"
msgstr "Плагин загружен"
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:157
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:344
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:158
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:345
#, java-format
msgid "Cannot create plugin directory {0}"
msgstr "Не удалось создать директорию плагина {0}"
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:166
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:167
#: ../java/src/net/i2p/router/web/UpdateHandler.java:298
#, java-format
msgid "from {0}"
msgstr "из {0}"
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:176
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:177
#, java-format
msgid "Plugin from {0} is corrupt"
msgstr "Загруженный из {0} плагин поврежден"
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:187
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:188
#, java-format
msgid "Plugin from {0} does not contain the required configuration file"
msgstr "Загруженный из {0} плагин не содержит необходимого файла настроек"
#. updateStatus("<b>" + "Plugin contains an invalid key" + ' ' + pubkey + ' ' + signer + "</b>");
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:200
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:201
#, java-format
msgid "Plugin from {0} contains an invalid key"
msgstr "Загруженный из {0} плагин содержит некорректный ключ"
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:219
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:228
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:237
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:220
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:229
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:238
#, java-format
msgid "Plugin signature verification of {0} failed"
msgstr "Плагин {0} содержит недействительную подпись"
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:252
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:253
#, java-format
msgid "Plugin from {0} has invalid name or version"
msgstr "Загруженный из {0} плагин имеет некорректное название или версию"
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:257
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:258
#, java-format
msgid "Plugin {0} has mismatched versions"
msgstr "Плагин {0} содержит несовпадающие версии"
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:265
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:266
#, java-format
msgid "This plugin requires I2P version {0} or higher"
msgstr "Для этого плагина требуется версия I2P {0} и выше"
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:273
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:274
#, java-format
msgid "This plugin requires Java version {0} or higher"
msgstr "Для этого плагина требуется версия Java {0} и выше"
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:281
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:282
msgid "Downloaded plugin is for new installs only, but the plugin is already installed"
msgstr "Загруженный инсталлятор плагина предназначен только для первоначальной установки, но такой плагин уже установлен"
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:293
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:294
msgid "Installed plugin does not contain the required configuration file"
msgstr "Установленный плагин не содержит необходимого файла настроек"
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:301
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:302
msgid "Signature of downloaded plugin does not match installed plugin"
msgstr "Подпись загруженного плагина не совпадает с установленным плагином"
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:308
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:309
#, java-format
msgid "Downloaded plugin version {0} is not newer than installed plugin"
msgstr "Версия скачанного плагина {0} не новее версии уже установленного плагина"
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:315
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:316
#, java-format
msgid "Plugin update requires installed plugin version {0} or higher"
msgstr "Для обновления плагина требуется установленная версия плагина {0} и выше"
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:322
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:323
#, java-format
msgid "Plugin update requires installed plugin version {0} or lower"
msgstr "Для обновления плагина требуется установленная версия плагина {0} и ниже"
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:339
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:340
msgid "Plugin is for upgrades only, but the plugin is not installed"
msgstr "Загруженный инсталлятор плагина предназначен только для обновления, но такой плагин ещё не был установлен"
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:352
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:353
#, java-format
msgid "Failed to install plugin in {0}"
msgstr "Не удалось установить плагин в {0}"
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:359
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:360
#, java-format
msgid "Plugin {0} installed, router restart required"
msgstr "Плагин {0} установлен, требуется перезапуск маршрутизатора"
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:361
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:362
#, java-format
msgid "Plugin {0} installed"
msgstr "Плагин {0} установлен"
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:379
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:380
#, java-format
msgid "Plugin {0} installed and started"
msgstr "Плагин {0} установлен и запущен"
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:382
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:383
#, java-format
msgid "Plugin {0} installed but failed to start, check logs"
msgstr "Плагин {0} установлен, но при его запуске произошел сбой, загляните в логи"
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:384
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:385
#, java-format
msgid "Plugin {0} installed but failed to start"
msgstr "Плагин {0} установлен, но при его запуске произошел сбой"
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:394
#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:395
#, java-format
msgid "Failed to download plugin from {0}"
msgstr "Не удалось скачать плагин из {0}"
@ -3214,37 +3186,44 @@ msgstr "Среднее"
msgid "Highest average"
msgstr "Максимальное среднее"
#: ../java/src/net/i2p/router/web/StatsGenerator.java:202
#. breaking the sentence like before makes translation in my language impossible.
#: ../java/src/net/i2p/router/web/StatsGenerator.java:201
#, java-format
msgid "in this period which ended {0} ago."
msgstr "в этом периоде который закончился {0} назад."
msgid "There were {0} event(s) in this period"
msgstr "Было {0} событий в этом периоде"
#: ../java/src/net/i2p/router/web/StatsGenerator.java:204
#. buf.append(' ');
#: ../java/src/net/i2p/router/web/StatsGenerator.java:203
#, java-format
msgid " which ended {0} ago."
msgstr "который закончился {0} назад."
#: ../java/src/net/i2p/router/web/StatsGenerator.java:205
msgid "No events"
msgstr "Нет событий"
#: ../java/src/net/i2p/router/web/StatsGenerator.java:210
#: ../java/src/net/i2p/router/web/StatsGenerator.java:211
msgid "Average event count"
msgstr "Среднее число событий"
#: ../java/src/net/i2p/router/web/StatsGenerator.java:212
#: ../java/src/net/i2p/router/web/StatsGenerator.java:213
msgid "Events in peak period"
msgstr "Событий за период пика"
#: ../java/src/net/i2p/router/web/StatsGenerator.java:220
#: ../java/src/net/i2p/router/web/StatsGenerator.java:221
msgid "Graph Data"
msgstr "График данных"
#: ../java/src/net/i2p/router/web/StatsGenerator.java:222
#: ../java/src/net/i2p/router/web/StatsGenerator.java:223
msgid "Graph Event Count"
msgstr "График количества событий"
#: ../java/src/net/i2p/router/web/StatsGenerator.java:225
#: ../java/src/net/i2p/router/web/StatsGenerator.java:226
msgid "Export Data as XML"
msgstr "Экспорт данных в XML"
#. Display the strict average
#: ../java/src/net/i2p/router/web/StatsGenerator.java:230
#: ../java/src/net/i2p/router/web/StatsGenerator.java:231
msgid "Lifetime average value"
msgstr "Среднее значение за время работы"
@ -4363,7 +4342,7 @@ msgid "Specify Port"
msgstr "Задать порт вручную"
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:509
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:339
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:327
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:330
msgid "Note"
msgstr "ВНИМАНИЕ"
@ -5020,58 +4999,42 @@ msgid "After tearing down the router, it will wait 1 minute before starting back
msgstr " "
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:315
msgid "Systray integration"
msgstr "Интеграция в область уведомлений"
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:317
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:319
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:321
msgid "If you are on windows, you can either enable or disable that icon here."
msgstr "Если Вы пользуетесь I2P под Windows, то здесь Вы можете настроить отображение этого значка."
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:327
msgid "Run on startup"
msgstr "Автоматический запуск I2P"
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:329
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:317
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:331
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:319
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:341
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:329
msgid "If you are running I2P as service right now, removing it will shut down your router immediately."
msgstr "Если служба I2P уже была запущена, при выборе варианта <b>\"Не запускать I2P при старте\"</b> маршрутизатор будет моментально остановлен."
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:343
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:331
msgid "You may want to consider shutting down gracefully, as above, then running 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:347
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:335
msgid "Debugging"
msgstr "Отладка"
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:349
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:337
msgid "View the job queue"
msgstr "Просмотр очереди заданий"
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:353
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:341
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 <a href=\"logs.jsp#servicelogs\">wrapper.log</a>."
msgstr "В некоторых случаях для отладки может пригодиться список состояний потоков I2P-маршутизатора. Для получения такого списка нажмите эту кнопку. Список будет сохранен в файле <a href=\"logs.jsp#servicelogs\">wrapper.log</a>."
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:359
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:347
msgid "Launch browser on router startup?"
msgstr "Запускать браузер при старте I2P?"
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:361
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:349
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 это веб-консоль. Здесь можно выбрать автоматическое открытие при запуске маршрутизатора страницы"
@ -5434,6 +5397,48 @@ msgstr "обзор туннелей"
msgid "I2P Tunnel Summary"
msgstr "Обзор туннелей I2P"
#~ msgid "Show systray icon"
#~ msgstr "Показать значок статуса"
#~ msgid "System tray icon enabled."
#~ msgstr "Включен значок-индикатор статуса в области уведомлений."
#~ msgid "System tray icon feature not supported on this platform. Sorry!"
#~ msgstr ""
#~ "Вывод индикаторов в области уведомлений на этой платформе не "
#~ "поддерживается. Извините!"
#~ msgid "Warning: unable to contact the systray manager"
#~ msgstr ""
#~ "Предупреждение: Не удалось соединиться с менеджером области уведомлений"
#~ msgid "Hide systray icon"
#~ msgstr "Спрятать значок статуса"
#~ msgid "System tray icon disabled."
#~ msgstr "Выключен значок-индикатор статуса в области уведомлений."
#~ 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, у Вас есть возможность отслеживать статус "
#~ "маршрутизатора через значок в области уведомлений"
#~ msgid ""
#~ "(later on, I2P client applications will be able to integrate their own "
#~ "functionality into the system tray as well)."
#~ msgstr "(когда-нибудь и клиентские приложения для I2P будут там доступны)."
#~ msgid ""
#~ "If you are on windows, you can either enable or disable that icon here."
#~ msgstr ""
#~ "Если Вы пользуетесь I2P под Windows, то здесь Вы можете настроить "
#~ "отображение этого значка."
#~ msgid ""
#~ "Ensure that nothing blocks outbound HTTP, check <a target=\"_top\" href="
#~ "\"logs.jsp\">logs</a> and if nothing helps, read the <a target=\"_top\" "

View File

@ -36,7 +36,7 @@ public class DateAndFlags extends DataStructureImpl {
/**
* @param flags 0 - 65535
*/
public DateAndFlags(int flags, long date) {
public DateAndFlags(long date, int flags) {
_flags = flags;
_date = date;
}
@ -44,7 +44,7 @@ public class DateAndFlags extends DataStructureImpl {
/**
* @param flags 0 - 65535
*/
public DateAndFlags(int flags, Date date) {
public DateAndFlags(Date date, int flags) {
_flags = flags;
_date = date.getTime();
}

View File

@ -5,10 +5,10 @@ import java.util.List;
import net.i2p.I2PAppContext;
class Executor implements Runnable {
private I2PAppContext _context;
private final I2PAppContext _context;
private Log _log;
private final List _readyEvents;
private SimpleStore runn;
private final SimpleStore runn;
public Executor(I2PAppContext ctx, Log log, List events, SimpleStore x) {
_context = ctx;
@ -31,9 +31,10 @@ class Executor implements Runnable {
try {
evt.timeReached();
} catch (Throwable t) {
log("wtf, event borked: " + evt, t);
log("Executing task " + evt + " exited unexpectedly, please report", t);
}
long time = _context.clock().now() - before;
// FIXME _log won't be non-null unless we already had a CRIT
if ( (time > 1000) && (_log != null) && (_log.shouldLog(Log.WARN)) )
_log.warn("wtf, event execution took " + time + ": " + evt);
}

View File

@ -30,10 +30,10 @@ public class SimpleScheduler {
public static SimpleScheduler getInstance() { return _instance; }
private static final int MIN_THREADS = 2;
private static final int MAX_THREADS = 4;
private I2PAppContext _context;
private Log _log;
private ScheduledThreadPoolExecutor _executor;
private String _name;
private final I2PAppContext _context;
private final Log _log;
private final ScheduledThreadPoolExecutor _executor;
private final String _name;
private int _count;
private final int _threads;
@ -42,7 +42,6 @@ public class SimpleScheduler {
_context = I2PAppContext.getGlobalContext();
_log = _context.logManager().getLog(SimpleScheduler.class);
_name = name;
_count = 0;
long maxMemory = Runtime.getRuntime().maxMemory();
_threads = (int) Math.max(MIN_THREADS, Math.min(MAX_THREADS, 1 + (maxMemory / (32*1024*1024))));
_executor = new ScheduledThreadPoolExecutor(_threads, new CustomThreadFactory());
@ -139,7 +138,7 @@ public class SimpleScheduler {
try {
_timedEvent.timeReached();
} catch (Throwable t) {
_log.log(Log.CRIT, _name + " wtf, event borked: " + _timedEvent, t);
_log.log(Log.CRIT, _name + ": Scheduled task " + _timedEvent + " exited unexpectedly, please report", t);
}
long time = System.currentTimeMillis() - before;
if (time > 1000 && _log.shouldLog(Log.WARN))

View File

@ -14,6 +14,8 @@ import net.i2p.I2PAppContext;
* appropriate time. The method that is fired however should NOT block (otherwise
* they b0rk the timer).
*
* WARNING - Deprecated.
* This is an inefficient mess. Use SimpleScheduler or SimpleTimer2 if possible.
*/
public class SimpleTimer {
private static final SimpleTimer _instance = new SimpleTimer();

View File

@ -29,10 +29,10 @@ public class SimpleTimer2 {
public static SimpleTimer2 getInstance() { return _instance; }
private static final int MIN_THREADS = 2;
private static final int MAX_THREADS = 4;
private I2PAppContext _context;
private final I2PAppContext _context;
private static Log _log; // static so TimedEvent can use it
private ScheduledThreadPoolExecutor _executor;
private String _name;
private final ScheduledThreadPoolExecutor _executor;
private final String _name;
private int _count;
private final int _threads;
@ -223,7 +223,7 @@ public class SimpleTimer2 {
try {
timeReached();
} catch (Throwable t) {
_log.log(Log.CRIT, _pool + " wtf, event borked: " + this, t);
_log.log(Log.CRIT, _pool + ": Timed task " + this + " exited unexpectedly, please report", t);
}
long time = System.currentTimeMillis() - before;
if (time > 500 && _log.shouldLog(Log.WARN))

View File

@ -1,6 +1,15 @@
2011-02-15 zzz
* i2psnark: Details link shuffle, mostly restore 0.8.3 behavior
* Profiles: Punish rejections more, in an attempt to spread the
load more through the network
* Timers: Log cleanup
2011-02-14 Mathiasdm
* Fix headless issue without reboot
2011-02-13 zzz
* Connect Client: Minor NPE fix cleanup
* JobQueue: Prevet NPE at shutdown (thanks liberty)
* JobQueue: Prevent NPE at shutdown (thanks liberty)
* GeoIP: Prevent startup NPE (ticket #413, thanks RN)
* NetDB: Prevent ExpireLeaseJob NPE (thanks sponge)
@ -18,6 +27,7 @@
* I2CP: Correctly close internal connections on the router side
when closed by the client, was causing massive memory leak
for internal clients using lots of sessions (thanks sponge)
(ticket #397)
* i2psnark:
- Improved magnet link parsing, use tr parameter if present
* i2ptunnel: Change shared clients default for new clients to false

View File

@ -18,7 +18,7 @@ public class RouterVersion {
/** deprecated */
public final static String ID = "Monotone";
public final static String VERSION = CoreVersion.VERSION;
public final static long BUILD = 10;
public final static long BUILD = 12;
/** for example "-test" */
public final static String EXTRA = "";

View File

@ -11,7 +11,7 @@ class CapacityCalculator {
private static final I2PAppContext _context = I2PAppContext.getGlobalContext();
/** used to adjust each period so that we keep trying to expand the peer's capacity */
static long GROWTH_FACTOR = 5;
static final long GROWTH_FACTOR = 5;
/** the calculator estimates over a 1 hour period */
private static long ESTIMATE_PERIOD = 60*60*1000;
@ -83,37 +83,42 @@ class CapacityCalculator {
*
* Let A = accects, R = rejects, F = fails
* @return estimated and adjusted accepts per hour, for the given period
* which is, more or less, max(0, 5 + (A * (A / (A + R))) - (4 * F))
* which is, more or less, max(0, 5 + (A * (A / (A + 2R))) - (4 * F))
*/
private static double estimateCapacity(RateStat acceptStat, RateStat rejectStat, RateStat failedStat, int period) {
Rate curAccepted = acceptStat.getRate(period);
Rate curRejected = rejectStat.getRate(period);
Rate curFailed = failedStat.getRate(period);
long eventCount = 0;
if (curAccepted != null)
double eventCount = 0;
if (curAccepted != null) {
eventCount = curAccepted.getCurrentEventCount() + curAccepted.getLastEventCount();
// Punish for rejections.
// We don't want to simply do eventCount -= rejected or we get to zero with 50% rejection,
// and we don't want everybody to be at zero during times of congestion.
if (eventCount > 0) {
long rejected = curRejected.getCurrentEventCount() + curRejected.getLastEventCount();
eventCount = eventCount * eventCount / (eventCount + rejected);
// Punish for rejections.
// We don't want to simply do eventCount -= rejected or we get to zero with 50% rejection,
// and we don't want everybody to be at zero during times of congestion.
if (eventCount > 0 && curRejected != null) {
long rejected = curRejected.getCurrentEventCount() + curRejected.getLastEventCount();
if (rejected > 0)
eventCount *= eventCount / (eventCount + (2 * rejected));
}
}
double stretch = ((double)ESTIMATE_PERIOD) / period;
double val = eventCount * stretch;
long failed = 0;
// Let's say a failure is 4 times worse than a rejection.
// It's actually much worse than that, but with 2-hop tunnels and a 8-peer
// fast pool, for example, you have a 1/7 chance of being falsely blamed.
// We also don't want to drive everybody's capacity to zero, that isn't helpful.
if (curFailed != null)
failed = (long) (0.5 + (4.0 * (curFailed.getCurrentTotalValue() + curFailed.getLastTotalValue()) / 100.0));
if (failed > 0) {
//if ( (period <= 10*60*1000) && (curFailed.getCurrentEventCount() > 0) )
// return 0.0d; // their tunnels have failed in the last 0-10 minutes
//else
val -= failed * stretch;
if (curFailed != null) {
double failed = curFailed.getCurrentTotalValue() + curFailed.getLastTotalValue();
if (failed > 0) {
//if ( (period <= 10*60*1000) && (curFailed.getCurrentEventCount() > 0) )
// return 0.0d; // their tunnels have failed in the last 0-10 minutes
//else
// .04 = 4.0 / 100.0 adjustment to failed
val -= 0.04 * failed * stretch;
}
}
val += GROWTH_FACTOR;