forked from I2P_Developers/i2p.i2p
merge of '0d9093cdc66fad9b4827931caa079ad00f2a76f7'
and '8aecdabbd225a6ea26a3c20725aeabfedf2dbe1d'
This commit is contained in:
46
.tx/config
Normal file
46
.tx/config
Normal file
@@ -0,0 +1,46 @@
|
||||
[I2P.i2ptunnel]
|
||||
source_file = apps/i2ptunnel/locale/messages_en.po
|
||||
source_lang = en
|
||||
trans.de = apps/i2ptunnel/locale/messages_de.po
|
||||
trans.nl = apps/i2ptunnel/locale/messages_nl.po
|
||||
trans.ru = apps/i2ptunnel/locale/messages_ru.po
|
||||
trans.zh_CN = apps/i2ptunnel/locale/messages_zh.po
|
||||
|
||||
[I2P.routerconsole]
|
||||
source_file = apps/routerconsole/locale/messages_en.po
|
||||
source_lang = en
|
||||
trans.de = apps/routerconsole/locale/messages_de.po
|
||||
trans.es = apps/routerconsole/locale/messages_es.po
|
||||
trans.fr = apps/routerconsole/locale/messages_fr.po
|
||||
trans.nl = apps/routerconsole/locale/messages_nl.po
|
||||
trans.ru = apps/routerconsole/locale/messages_ru.po
|
||||
trans.zh_CN = apps/routerconsole/locale/messages_zh.po
|
||||
|
||||
[I2P.susidns]
|
||||
source_file = apps/susidns/locale/messages_en.po
|
||||
source_lang = en
|
||||
trans.de = apps/susidns/locale/messages_de.po
|
||||
trans.nl = apps/susidns/locale/messages_nl.po
|
||||
trans.ru = apps/susidns/locale/messages_ru.po
|
||||
trans.zh_CN = apps/susidns/locale/messages_zh.po
|
||||
|
||||
[I2P.i2psnark]
|
||||
source_file = apps/i2psnark/locale/messages_en.po
|
||||
source_lang = en
|
||||
trans.de = apps/i2psnark/locale/messages_de.po
|
||||
trans.es = apps/i2psnark/locale/messages_es.po
|
||||
trans.fr = apps/i2psnark/locale/messages_fr.po
|
||||
trans.nl = apps/i2psnark/locale/messages_nl.po
|
||||
trans.pt = apps/i2psnark/locale/messages_pt.po
|
||||
trans.ru = apps/i2psnark/locale/messages_ru.po
|
||||
trans.zh_CN = apps/i2psnark/locale/messages_zh.po
|
||||
|
||||
[I2P.desktopgui]
|
||||
source_file = apps/desktopgui/locale/messages_en.po
|
||||
source_lang = en
|
||||
trans.nl = apps/desktopgui/locale/messages_nl.po
|
||||
trans.zh_CN = apps/desktopgui/locale/messages_zh.po
|
||||
|
||||
[main]
|
||||
host = http://www.transifex.net
|
||||
|
||||
@@ -120,6 +120,7 @@ public class BOB {
|
||||
public final static String PROP_CONFIG_LOCATION = "BOB.config";
|
||||
public final static String PROP_BOB_PORT = "BOB.port";
|
||||
public final static String PROP_BOB_HOST = "BOB.host";
|
||||
public final static String PROP_CFG_VER = "BOB.CFG.VER";
|
||||
private static NamedDB database;
|
||||
private static Properties props = new Properties();
|
||||
private static AtomicBoolean spin = new AtomicBoolean(true);
|
||||
@@ -209,30 +210,41 @@ public class BOB {
|
||||
// Global router and client API configurations that are missing are set to defaults here.
|
||||
if (!props.containsKey(I2PClient.PROP_TCP_HOST)) {
|
||||
props.setProperty(I2PClient.PROP_TCP_HOST, "localhost");
|
||||
save = true;
|
||||
}
|
||||
if (!props.containsKey(I2PClient.PROP_TCP_PORT)) {
|
||||
props.setProperty(I2PClient.PROP_TCP_PORT, "7654");
|
||||
}
|
||||
if (!props.containsKey(I2PClient.PROP_RELIABILITY)) {
|
||||
props.setProperty(I2PClient.PROP_RELIABILITY, I2PClient.PROP_RELIABILITY_BEST_EFFORT);
|
||||
save = true;
|
||||
}
|
||||
if (!props.containsKey(PROP_BOB_PORT)) {
|
||||
props.setProperty(PROP_BOB_PORT, "2827"); // 0xB0B
|
||||
save = true;
|
||||
}
|
||||
if (!props.containsKey("inbound.length")) {
|
||||
props.setProperty("inbound.length", "1");
|
||||
save = true;
|
||||
}
|
||||
if (!props.containsKey("outbound.length")) {
|
||||
props.setProperty("outbound.length", "1");
|
||||
save = true;
|
||||
}
|
||||
if (!props.containsKey("inbound.lengthVariance")) {
|
||||
props.setProperty("inbound.lengthVariance", "0");
|
||||
save = true;
|
||||
}
|
||||
if (!props.containsKey("outbound.lengthVariance")) {
|
||||
props.setProperty("outbound.lengthVariance", "0");
|
||||
save = true;
|
||||
}
|
||||
if (!props.containsKey(PROP_BOB_HOST)) {
|
||||
props.setProperty(PROP_BOB_HOST, "localhost");
|
||||
save = true;
|
||||
}
|
||||
// PROP_RELIABILITY_NONE, PROP_RELIABILITY_BEST_EFFORT, PROP_RELIABILITY_GUARANTEED
|
||||
if (!props.containsKey(PROP_CFG_VER)) {
|
||||
props.setProperty(I2PClient.PROP_RELIABILITY, I2PClient.PROP_RELIABILITY_NONE);
|
||||
props.setProperty(PROP_CFG_VER,"1");
|
||||
save = true;
|
||||
}
|
||||
if (save) {
|
||||
File cfg = new File(configLocation);
|
||||
|
||||
@@ -107,7 +107,7 @@ public class DoCMDS implements Runnable {
|
||||
private static final String C_visit = "visit";
|
||||
private static final String C_zap = "zap";
|
||||
|
||||
/* all the coomands available, plus description */
|
||||
/* all the commands available, plus description */
|
||||
private static final String C_ALL[][] = {
|
||||
{C_help, C_help + " <command> * Get help on a command."},
|
||||
{C_clear, C_clear + " * Clear the current nickname out of the list."},
|
||||
@@ -962,7 +962,7 @@ public class DoCMDS implements Runnable {
|
||||
} catch (Exception e) {
|
||||
break die;
|
||||
}
|
||||
// Finally say OK.
|
||||
// Finally say OK.
|
||||
out.println("OK Nickname set to " + Arg);
|
||||
}
|
||||
|
||||
@@ -1472,7 +1472,7 @@ public class DoCMDS implements Runnable {
|
||||
} // die
|
||||
out.print("ERROR A really bad error just happened, ");
|
||||
} // quit
|
||||
// Say goodbye.
|
||||
// Say goodbye.
|
||||
|
||||
out.println("OK Bye!");
|
||||
|
||||
|
||||
@@ -45,7 +45,9 @@
|
||||
<exec executable="sh" osfamily="mac" failifexecutionfails="true" >
|
||||
<arg value="./bundle-messages.sh" />
|
||||
</exec>
|
||||
|
||||
<exec executable="sh" osfamily="windows" failifexecutionfails="true" >
|
||||
<arg value="./bundle-messages.sh" />
|
||||
</exec>
|
||||
<jar basedir="${build}" destfile="${dist}/${jar}">
|
||||
<manifest>
|
||||
<attribute name="Main-Class" value="net.i2p.desktopgui.Main"/>
|
||||
@@ -78,6 +80,10 @@
|
||||
<arg value="./bundle-messages.sh" />
|
||||
<arg value="-p" />
|
||||
</exec>
|
||||
<exec executable="sh" osfamily="windows" failifexecutionfails="true" >
|
||||
<arg value="./bundle-messages.sh" />
|
||||
<arg value="-p" />
|
||||
</exec>
|
||||
</target>
|
||||
|
||||
<target name="dist" depends="jar" />
|
||||
|
||||
@@ -19,6 +19,17 @@ then
|
||||
POUPDATE=1
|
||||
fi
|
||||
|
||||
# on windows, one must specify the path of commnad find
|
||||
# since windows has its own retarded version of find.
|
||||
if which find|grep -q -i windows ; then
|
||||
export PATH=.:/bin:/usr/local/bin:$PATH
|
||||
fi
|
||||
# Fast mode - update ondemond
|
||||
echo Placing a file named messages_{LangCode}.only in locale folder,
|
||||
echo will limit .po file update to the language specified by {LangCode}.
|
||||
LG2=$(find locale -iname messages_*.only|tail -1)
|
||||
[ LG2 ] && LG2=${LG2#locale/messages_} && LG2=${LG2%.only}
|
||||
|
||||
# add ../java/ so the refs will work in the po file
|
||||
JPATHS="src"
|
||||
for i in locale/messages_*.po
|
||||
@@ -26,6 +37,11 @@ do
|
||||
# get language
|
||||
LG=${i#locale/messages_}
|
||||
LG=${LG%.po}
|
||||
|
||||
# skip, if specified
|
||||
if [ $LG2 ]; then
|
||||
[ $LG != $LG2 ] && continue || echo INFO: Language update is set to [$LG2] only.
|
||||
fi
|
||||
|
||||
if [ "$POUPDATE" = "1" ]
|
||||
then
|
||||
@@ -33,7 +49,6 @@ do
|
||||
find $JPATHS -name *.java -newer $i > $TMPFILE
|
||||
fi
|
||||
|
||||
echo $LG
|
||||
if [ -s build/net/i2p/desktopgui/messages_$LG.class -a \
|
||||
build/net/i2p/desktopgui/messages_$LG.class -nt $i -a \
|
||||
! -s $TMPFILE ]
|
||||
@@ -80,15 +95,19 @@ do
|
||||
touch $i
|
||||
fi
|
||||
|
||||
echo "Generating ${CLASS}_$LG ResourceBundle..."
|
||||
if [ "$LG" != "en" ]
|
||||
then
|
||||
# only generate for non-source language
|
||||
echo "Generating ${CLASS}_$LG ResourceBundle..."
|
||||
|
||||
# convert to class files in build
|
||||
msgfmt --java --statistics -r $CLASS -l $LG -d build $i
|
||||
if [ $? -ne 0 ]
|
||||
then
|
||||
echo 'Warning - msgfmt failed, not updating translations'
|
||||
break
|
||||
fi
|
||||
# convert to class files in build
|
||||
msgfmt --java --statistics -r $CLASS -l $LG -d build $i
|
||||
if [ $? -ne 0 ]
|
||||
then
|
||||
echo 'Warning - msgfmt failed, not updating translations'
|
||||
break
|
||||
fi
|
||||
fi
|
||||
done
|
||||
rm -f $TMPFILE
|
||||
# todo: return failure
|
||||
|
||||
42
apps/desktopgui/locale/messages_en.po
Normal file
42
apps/desktopgui/locale/messages_en.po
Normal file
@@ -0,0 +1,42 @@
|
||||
# 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-13 11:54+0000\n"
|
||||
"PO-Revision-Date: 2010-06-15 14:09+0100\n"
|
||||
"Last-Translator: duck <duck@mail.i2p>\n"
|
||||
"Language-Team: duck <duck@mail.i2p>\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 ""
|
||||
|
||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
||||
msgid "I2P is starting!"
|
||||
msgstr ""
|
||||
|
||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:38
|
||||
msgid "Starting"
|
||||
msgstr ""
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:25
|
||||
msgid "Launch I2P Browser"
|
||||
msgstr ""
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:49
|
||||
msgid "Restart I2P"
|
||||
msgstr ""
|
||||
|
||||
#: src/net/i2p/desktopgui/InternalTrayManager.java:67
|
||||
msgid "Stop I2P"
|
||||
msgstr ""
|
||||
@@ -1,3 +1,15 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"POT-Creation-Date: \n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
# NL
|
||||
|
||||
#: src/net/i2p/desktopgui/ExternalTrayManager.java:23
|
||||
msgid "Start I2P"
|
||||
msgstr "I2P starten"
|
||||
@@ -24,6 +36,6 @@ msgstr "I2P stoppen"
|
||||
|
||||
#~ msgid "Browser not found"
|
||||
#~ msgstr "Browser niet gevonden"
|
||||
|
||||
#~ msgid "The default browser for your system was not found."
|
||||
#~ msgstr "De standaard webbrowser voor je systeem werd niet gevonden."
|
||||
|
||||
|
||||
41
apps/desktopgui/locale/messages_zh.po
Normal file
41
apps/desktopgui/locale/messages_zh.po
Normal file
@@ -0,0 +1,41 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-02-12 11:40+0000\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\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
|
||||
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"
|
||||
|
||||
#~ msgid "Browser not found"
|
||||
#~ msgstr "Browser niet gevonden"
|
||||
|
||||
#~ msgid "The default browser for your system was not found."
|
||||
#~ msgstr "De standaard webbrowser voor je systeem werd niet gevonden."
|
||||
@@ -55,19 +55,14 @@ public class Main {
|
||||
* Main method launching the application.
|
||||
*/
|
||||
public static void beginStartup(String[] args) {
|
||||
boolean wasHeadless = Boolean.valueOf(System.getProperty("java.awt.headless")).booleanValue();
|
||||
if(wasHeadless) {
|
||||
System.setProperty("java.awt.headless", "false");
|
||||
}
|
||||
boolean headless_check = true;
|
||||
try {
|
||||
// X permissions error is a java.lang.InternalError (a Throwable)
|
||||
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
|
||||
headless_check = ge.isHeadlessInstance();
|
||||
} catch (Throwable t) {}
|
||||
if (wasHeadless)
|
||||
System.setProperty("java.awt.headless", "true");
|
||||
if (headless_check) {
|
||||
String headless = RouterManager.getRouterContext().getProperty("router.isHeadless");
|
||||
boolean isHeadless = Boolean.parseBoolean(headless);
|
||||
if(isHeadless) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
catch(Exception e) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
#
|
||||
# Update messages_xx.po and messages_xx.class files,
|
||||
# from both java and jsp sources.
|
||||
# Requires installed programs xgettext, msgfmt, msgmerge, and find.
|
||||
# zzz - public domain
|
||||
#
|
||||
|
||||
## launching sh.exe with -login parameter will open a shell with the current path always pointing to \bin\
|
||||
## need to cd into our orignal path - where we call sh.exe from.
|
||||
|
||||
cd $CALLFROM
|
||||
## echo $PWD
|
||||
|
||||
## except this everything is the same with bundle-message.sh
|
||||
## walking - public domain :-D
|
||||
|
||||
source bundle-messages.sh $PARAS
|
||||
@@ -59,15 +59,14 @@
|
||||
<target name="bundle" depends="compile">
|
||||
<!-- Update the messages_*.po files.
|
||||
We need to supply the bat file for windows, and then change the fail property to true -->
|
||||
<exec executable="sh" osfamily="unix" failifexecutionfails="false" >
|
||||
<exec executable="sh" osfamily="unix" failifexecutionfails="true" >
|
||||
<arg value="./bundle-messages.sh" />
|
||||
</exec>
|
||||
<exec executable="sh" osfamily="mac" failifexecutionfails="false" >
|
||||
<exec executable="sh" osfamily="mac" failifexecutionfails="true" >
|
||||
<arg value="./bundle-messages.sh" />
|
||||
</exec>
|
||||
<exec executable="cmd" osfamily="windows" failifexecutionfails="false" >
|
||||
<arg value="/c" />
|
||||
<arg value="bundle-messages.bat" />
|
||||
<exec executable="sh" osfamily="windows" failifexecutionfails="true" >
|
||||
<arg value="./bundle-messages.sh" />
|
||||
</exec>
|
||||
</target>
|
||||
|
||||
@@ -81,9 +80,8 @@
|
||||
<arg value="./bundle-messages.sh" />
|
||||
<arg value="-p" />
|
||||
</exec>
|
||||
<exec executable="cmd" osfamily="windows" failifexecutionfails="true" >
|
||||
<arg value="/c" />
|
||||
<arg value="bundle-messages.bat" />
|
||||
<exec executable="sh" osfamily="windows" failifexecutionfails="true" >
|
||||
<arg value="./bundle-messages.sh" />
|
||||
<arg value="-p" />
|
||||
</exec>
|
||||
</target>
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
@echo off
|
||||
set Callfrom=%cd%
|
||||
set Paras=%1
|
||||
|
||||
rem before calling make sure you have msys and mingw 's "bin" path
|
||||
rem in your current searching path
|
||||
rem type "set path" to check
|
||||
if not exist ..\locale\*.only goto updateALL
|
||||
|
||||
rem put a messages_xx.only(eg messages_zh.only) into locale folder
|
||||
rem this script will only touch the po file(eg zh) you specified, leaving other po files untact.
|
||||
|
||||
for %%i in (..\locale\*.only) do set PO=%%~ni
|
||||
echo [Notice] Yu choose to Ony update the choosen file: %PO%.po
|
||||
for %%i in (..\locale\*.po) do if not %%~ni==%PO% ren %%i %%~ni.po-
|
||||
|
||||
call sh --login %cd%\bmsg.sh
|
||||
|
||||
for %%i in (..\locale\*.po-) do if not %%~ni==%PO% ren %%i %%~ni.po
|
||||
goto end
|
||||
|
||||
:updateALL
|
||||
call sh --login %cd%\bmsg.sh
|
||||
|
||||
:end
|
||||
echo End of Message Bundling
|
||||
@@ -18,6 +18,17 @@ then
|
||||
POUPDATE=1
|
||||
fi
|
||||
|
||||
# on windows, one must specify the path of commnad find
|
||||
# since windows has its own retarded version of find.
|
||||
if which find|grep -q -i windows ; then
|
||||
export PATH=.:/bin:/usr/local/bin:$PATH
|
||||
fi
|
||||
# Fast mode - update ondemond
|
||||
echo Placing a file named messages_{LangCode}.only in locale folder,
|
||||
echo will limit .po file update to the language specified by {LangCode}.
|
||||
LG2=$(find ../locale -iname messages_*.only|tail -1)
|
||||
[ LG2 ] && LG2=${LG2#../locale/messages_} && LG2=${LG2%.only}
|
||||
|
||||
# add ../java/ so the refs will work in the po file
|
||||
JPATHS="../java/src"
|
||||
for i in ../locale/messages_*.po
|
||||
@@ -26,6 +37,11 @@ do
|
||||
LG=${i#../locale/messages_}
|
||||
LG=${LG%.po}
|
||||
|
||||
# skip, if specified
|
||||
if [ $LG2 ]; then
|
||||
[ $LG != $LG2 ] && continue || echo INFO: Language update is set to [$LG2] only.
|
||||
fi
|
||||
|
||||
if [ "$POUPDATE" = "1" ]
|
||||
then
|
||||
# make list of java files newer than the .po file
|
||||
@@ -70,15 +86,19 @@ do
|
||||
touch $i
|
||||
fi
|
||||
|
||||
echo "Generating ${CLASS}_$LG ResourceBundle..."
|
||||
if [ "$LG" != "en" ]
|
||||
then
|
||||
# only generate for non-source language
|
||||
echo "Generating ${CLASS}_$LG ResourceBundle..."
|
||||
|
||||
# convert to class files in build/obj
|
||||
msgfmt --java --statistics -r $CLASS -l $LG -d build/obj $i
|
||||
if [ $? -ne 0 ]
|
||||
then
|
||||
echo 'Warning - msgfmt failed, not updating translations'
|
||||
break
|
||||
fi
|
||||
# convert to class files in build/obj
|
||||
msgfmt --java --statistics -r $CLASS -l $LG -d build/obj $i
|
||||
if [ $? -ne 0 ]
|
||||
then
|
||||
echo 'Warning - msgfmt failed, not updating translations'
|
||||
break
|
||||
fi
|
||||
fi
|
||||
done
|
||||
rm -f $TMPFILE
|
||||
# todo: return failure
|
||||
|
||||
@@ -254,6 +254,7 @@ public class Snark
|
||||
private boolean stopped;
|
||||
private byte[] id;
|
||||
private byte[] infoHash;
|
||||
private String additionalTrackerURL;
|
||||
private final I2PSnarkUtil _util;
|
||||
private final PeerCoordinatorSet _peerCoordinatorSet;
|
||||
private String trackerProblems;
|
||||
@@ -453,9 +454,10 @@ public class Snark
|
||||
*
|
||||
* @param torrent a fake name for now (not a file name)
|
||||
* @param ih 20-byte info hash
|
||||
* @param trackerURL may be null
|
||||
* @since 0.8.4
|
||||
*/
|
||||
public Snark(I2PSnarkUtil util, String torrent, byte[] ih,
|
||||
public Snark(I2PSnarkUtil util, String torrent, byte[] ih, String trackerURL,
|
||||
CompleteListener complistener, PeerCoordinatorSet peerCoordinatorSet,
|
||||
ConnectionAcceptor connectionAcceptor, boolean start, String rootDir)
|
||||
{
|
||||
@@ -465,6 +467,7 @@ public class Snark
|
||||
acceptor = connectionAcceptor;
|
||||
this.torrent = torrent;
|
||||
this.infoHash = ih;
|
||||
this.additionalTrackerURL = trackerURL;
|
||||
this.rootDataDir = rootDir;
|
||||
stopped = true;
|
||||
id = generateID();
|
||||
@@ -535,7 +538,7 @@ public class Snark
|
||||
acceptor = new ConnectionAcceptor(_util, serversocket, new PeerAcceptor(coordinator));
|
||||
}
|
||||
// TODO pass saved closest DHT nodes to the tracker? or direct to the coordinator?
|
||||
trackerclient = new TrackerClient(_util, meta, coordinator, this);
|
||||
trackerclient = new TrackerClient(_util, meta, additionalTrackerURL, coordinator, this);
|
||||
}
|
||||
|
||||
stopped = false;
|
||||
@@ -564,11 +567,13 @@ public class Snark
|
||||
fatal("Could not reopen storage", ioe);
|
||||
}
|
||||
}
|
||||
TrackerClient newClient = new TrackerClient(_util, meta, coordinator, this);
|
||||
TrackerClient newClient = new TrackerClient(_util, meta, additionalTrackerURL, coordinator, this);
|
||||
if (!trackerclient.halted())
|
||||
trackerclient.halt();
|
||||
trackerclient = newClient;
|
||||
trackerclient.start();
|
||||
} else {
|
||||
debug("NOT starting TrackerClient???", NOTICE);
|
||||
}
|
||||
}
|
||||
/**
|
||||
@@ -825,6 +830,14 @@ public class Snark
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return trackerURL string from magnet-mode constructor, may be null
|
||||
* @since 0.8.4
|
||||
*/
|
||||
public String getTrackerURL() {
|
||||
return additionalTrackerURL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets debug, ip and torrent variables then creates a Snark
|
||||
* instance. Calls usage(), which terminates the program, if
|
||||
|
||||
@@ -525,13 +525,13 @@ public class SnarkManager implements Snark.CompleteListener {
|
||||
* Caller must verify this torrent is not already added.
|
||||
* @throws RuntimeException via Snark.fatal()
|
||||
*/
|
||||
public void addTorrent(String filename) { addTorrent(filename, false); }
|
||||
private void addTorrent(String filename) { addTorrent(filename, false); }
|
||||
|
||||
/**
|
||||
* Caller must verify this torrent is not already added.
|
||||
* @throws RuntimeException via Snark.fatal()
|
||||
*/
|
||||
public void addTorrent(String filename, boolean dontAutoStart) {
|
||||
private void addTorrent(String filename, boolean dontAutoStart) {
|
||||
if ((!dontAutoStart) && !_util.connected()) {
|
||||
addMessage(_("Connecting to I2P"));
|
||||
boolean ok = _util.connect();
|
||||
@@ -578,13 +578,24 @@ public class SnarkManager implements Snark.CompleteListener {
|
||||
fis = null;
|
||||
} catch (IOException e) {}
|
||||
|
||||
// This test may be a duplicate, but not if we were called
|
||||
// from the DirMonitor, which only checks for dup torrent file names.
|
||||
Snark snark = getTorrentByInfoHash(info.getInfoHash());
|
||||
if (snark != null) {
|
||||
// TODO - if the existing one is a magnet, delete it and add the metainfo instead?
|
||||
addMessage(_("Torrent with this info hash is already running: {0}", snark.getBaseName()));
|
||||
return;
|
||||
}
|
||||
|
||||
if (!TrackerClient.isValidAnnounce(info.getAnnounce())) {
|
||||
if (_util.shouldUseOpenTrackers() && _util.getOpenTrackers() != null) {
|
||||
addMessage(_("Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and DHT only.", info.getName()));
|
||||
} else if (_util.getDHT() != null) {
|
||||
addMessage(_("Warning - No I2P trackers in \"{0}\", and open trackers are disabled, will announce to DHT only.", info.getName()));
|
||||
//addMessage(_("Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and DHT only.", info.getName()));
|
||||
addMessage(_("Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers only.", info.getName()));
|
||||
//} else if (_util.getDHT() != null) {
|
||||
// addMessage(_("Warning - No I2P trackers in \"{0}\", and open trackers are disabled, will announce to DHT only.", info.getName()));
|
||||
} else {
|
||||
addMessage(_("Warning - No I2P trackers in \"{0}\", and DHT and open trackers are disabled, you should enable open trackers or DHT before starting the torrent.", info.getName()));
|
||||
//addMessage(_("Warning - No I2P trackers in \"{0}\", and DHT and open trackers are disabled, you should enable open trackers or DHT before starting the torrent.", info.getName()));
|
||||
addMessage(_("Warning - No I2P Trackers found in \"{0}\". Make sure Open Tracker is enabled before starting this torrent.", info.getName()));
|
||||
dontAutoStart = true;
|
||||
}
|
||||
}
|
||||
@@ -632,11 +643,15 @@ public class SnarkManager implements Snark.CompleteListener {
|
||||
*
|
||||
* @param name hex or b32 name from the magnet link
|
||||
* @param ih 20 byte info hash
|
||||
* @param trackerURL may be null
|
||||
* @param udpateStatus should we add this magnet to the config file,
|
||||
* to save it across restarts, in case we don't get
|
||||
* the metadata before shutdown?
|
||||
* @throws RuntimeException via Snark.fatal()
|
||||
* @since 0.8.4
|
||||
*/
|
||||
public void addMagnet(String name, byte[] ih, boolean updateStatus) {
|
||||
Snark torrent = new Snark(_util, name, ih, this,
|
||||
public void addMagnet(String name, byte[] ih, String trackerURL, boolean updateStatus) {
|
||||
Snark torrent = new Snark(_util, name, ih, trackerURL, this,
|
||||
_peerCoordinatorSet, _connectionAcceptor,
|
||||
false, getDataDir().getPath());
|
||||
|
||||
@@ -1140,6 +1155,10 @@ public class SnarkManager implements Snark.CompleteListener {
|
||||
saveTorrentStatus(meta, storage.getBitField(), null); // no file priorities
|
||||
String name = (new File(getDataDir(), storage.getBaseName() + ".torrent")).getAbsolutePath();
|
||||
try {
|
||||
// put the announce URL in the file
|
||||
String announce = snark.getTrackerURL();
|
||||
if (announce != null)
|
||||
meta = meta.reannounce(announce);
|
||||
synchronized (_snarks) {
|
||||
locked_writeMetaInfo(meta, name);
|
||||
// put it in the list under the new name
|
||||
@@ -1172,14 +1191,17 @@ public class SnarkManager implements Snark.CompleteListener {
|
||||
String b64 = k.substring(PROP_META_MAGNET_PREFIX.length());
|
||||
b64 = b64.replace('$', '=');
|
||||
byte[] ih = Base64.decode(b64);
|
||||
// ignore value
|
||||
// ignore value - TODO put tracker URL in value
|
||||
if (ih != null && ih.length == 20)
|
||||
addMagnet("Magnet: " + I2PSnarkUtil.toHex(ih), ih, false);
|
||||
addMagnet("Magnet: " + I2PSnarkUtil.toHex(ih), ih, null, false);
|
||||
// else remove from config?
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* caller must synchronize on _snarks
|
||||
*/
|
||||
private void monitorTorrents(File dir) {
|
||||
String fileNames[] = dir.list(TorrentFilenameFilter.instance());
|
||||
List<String> foundNames = new ArrayList(0);
|
||||
@@ -1261,6 +1283,7 @@ public class SnarkManager implements Snark.CompleteListener {
|
||||
"Postman", "http://tracker2.postman.i2p/announce.php=http://tracker2.postman.i2p/"
|
||||
,"Welterde", "http://tracker.welterde.i2p/a=http://tracker.welterde.i2p/stats?mode=top5"
|
||||
// , "CRSTRACK", "http://b4G9sCdtfvccMAXh~SaZrPqVQNyGQbhbYMbw6supq2XGzbjU4NcOmjFI0vxQ8w1L05twmkOvg5QERcX6Mi8NQrWnR0stLExu2LucUXg1aYjnggxIR8TIOGygZVIMV3STKH4UQXD--wz0BUrqaLxPhrm2Eh9Hwc8TdB6Na4ShQUq5Xm8D4elzNUVdpM~RtChEyJWuQvoGAHY3ppX-EJJLkiSr1t77neS4Lc-KofMVmgI9a2tSSpNAagBiNI6Ak9L1T0F9uxeDfEG9bBSQPNMOSUbAoEcNxtt7xOW~cNOAyMyGydwPMnrQ5kIYPY8Pd3XudEko970vE0D6gO19yoBMJpKx6Dh50DGgybLQ9CpRaynh2zPULTHxm8rneOGRcQo8D3mE7FQ92m54~SvfjXjD2TwAVGI~ae~n9HDxt8uxOecAAvjjJ3TD4XM63Q9TmB38RmGNzNLDBQMEmJFpqQU8YeuhnS54IVdUoVQFqui5SfDeLXlSkh4vYoMU66pvBfWbAAAA.i2p/tracker/announce.php=http://crstrack.i2p/tracker/"
|
||||
,"Exotrack", "http://blbgywsjubw3d2zih2giokakhe3o2cko7jtte4risb3hohbcoyva.b32.i2p/announce.php=http://exotrack.i2p/"
|
||||
};
|
||||
|
||||
/** comma delimited list of name=announceURL=baseURL for the trackers to be displayed */
|
||||
|
||||
@@ -65,6 +65,7 @@ public class TrackerClient extends I2PAppThread
|
||||
|
||||
private I2PSnarkUtil _util;
|
||||
private final MetaInfo meta;
|
||||
private final String additionalTrackerURL;
|
||||
private final PeerCoordinator coordinator;
|
||||
private final Snark snark;
|
||||
private final int port;
|
||||
@@ -76,8 +77,10 @@ public class TrackerClient extends I2PAppThread
|
||||
|
||||
/**
|
||||
* @param meta null if in magnet mode
|
||||
* @param additionalTrackerURL may be null, from the ?tr= param in magnet mode, otherwise ignored
|
||||
*/
|
||||
public TrackerClient(I2PSnarkUtil util, MetaInfo meta, PeerCoordinator coordinator, Snark snark)
|
||||
public TrackerClient(I2PSnarkUtil util, MetaInfo meta, String additionalTrackerURL,
|
||||
PeerCoordinator coordinator, Snark snark)
|
||||
{
|
||||
super();
|
||||
// Set unique name.
|
||||
@@ -85,13 +88,11 @@ public class TrackerClient extends I2PAppThread
|
||||
setName("TrackerClient " + id.substring(id.length() - 12));
|
||||
_util = util;
|
||||
this.meta = meta;
|
||||
this.additionalTrackerURL = additionalTrackerURL;
|
||||
this.coordinator = coordinator;
|
||||
this.snark = snark;
|
||||
|
||||
this.port = 6881; //(port == -1) ? 9 : port;
|
||||
|
||||
stop = false;
|
||||
started = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -138,17 +139,21 @@ public class TrackerClient extends I2PAppThread
|
||||
// todo: check for b32 matches as well
|
||||
trackers = new ArrayList(2);
|
||||
String primary = null;
|
||||
if (meta != null) {
|
||||
if (meta != null)
|
||||
primary = meta.getAnnounce();
|
||||
else if (additionalTrackerURL != null)
|
||||
primary = additionalTrackerURL;
|
||||
if (primary != null) {
|
||||
if (isValidAnnounce(primary)) {
|
||||
trackers.add(new Tracker(meta.getAnnounce(), true));
|
||||
trackers.add(new Tracker(primary, true));
|
||||
_log.debug("Announce: [" + primary + "] infoHash: " + infoHash);
|
||||
} else {
|
||||
_log.warn("Skipping invalid or non-i2p announce: " + primary);
|
||||
}
|
||||
}
|
||||
if (primary == null)
|
||||
} else {
|
||||
_log.warn("No primary announce");
|
||||
primary = "";
|
||||
}
|
||||
List tlist = _util.getOpenTrackers();
|
||||
if (tlist != null) {
|
||||
for (int i = 0; i < tlist.size(); i++) {
|
||||
|
||||
@@ -65,7 +65,8 @@ public class I2PSnarkServlet extends Default {
|
||||
|
||||
public static final String PROP_CONFIG_FILE = "i2psnark.configFile";
|
||||
/** BEP 9 */
|
||||
private static final String MAGNET = "magnet:?xt=urn:btih:";
|
||||
private static final String MAGNET = "magnet:";
|
||||
private static final String MAGNET_FULL = MAGNET + "?xt=urn:btih:";
|
||||
/** http://sponge.i2p/files/maggotspec.txt */
|
||||
private static final String MAGGOT = "maggot://";
|
||||
|
||||
@@ -1216,7 +1217,8 @@ public class I2PSnarkServlet extends Default {
|
||||
out.write("</option>\n");
|
||||
// todo remember this one with _lastAnnounceURL also
|
||||
out.write("<option value=\"none\">");
|
||||
out.write(_("Open trackers and DHT only"));
|
||||
//out.write(_("Open trackers and DHT only"));
|
||||
out.write(_("Open trackers only"));
|
||||
out.write("</option>\n");
|
||||
Map trackers = _manager.getTrackers();
|
||||
for (Iterator iter = trackers.entrySet().iterator(); iter.hasNext(); ) {
|
||||
@@ -1381,7 +1383,7 @@ public class I2PSnarkServlet extends Default {
|
||||
}
|
||||
out.write("<tr><td>");
|
||||
out.write(_("I2CP options"));
|
||||
out.write(": <td><textarea name=\"i2cpOpts\" cols=\"60\" rows=\"1\" wrap=\"off\" >"
|
||||
out.write(": <td><textarea name=\"i2cpOpts\" cols=\"60\" rows=\"1\" wrap=\"off\" spellcheck=\"false\" >"
|
||||
+ opts.toString() + "</textarea><br>\n");
|
||||
|
||||
out.write("<tr><td> <td><input type=\"submit\" value=\"");
|
||||
@@ -1405,13 +1407,22 @@ public class I2PSnarkServlet extends Default {
|
||||
private void addMagnet(String url) {
|
||||
String ihash;
|
||||
String name;
|
||||
String trackerURL = null;
|
||||
if (url.startsWith(MAGNET)) {
|
||||
ihash = url.substring(MAGNET.length()).trim();
|
||||
int amp = ihash.indexOf('&');
|
||||
if (amp >= 0)
|
||||
ihash = ihash.substring(0, amp);
|
||||
// magnet:?xt=urn:btih:0691e40aae02e552cfcb57af1dca56214680c0c5&tr=http://tracker2.postman.i2p/announce.php
|
||||
String xt = getParam("xt", url);
|
||||
if (xt == null || !xt.startsWith("urn:btih:")) {
|
||||
_manager.addMessage(_("Invalid magnet URL {0}", url));
|
||||
return;
|
||||
}
|
||||
ihash = xt.substring("urn:btih:".length());
|
||||
trackerURL = getParam("tr", url);
|
||||
name = "Magnet " + ihash;
|
||||
String dn = getParam("dn", url);
|
||||
if (dn != null)
|
||||
name += " (" + Storage.filterName(dn) + ')';
|
||||
} else if (url.startsWith(MAGGOT)) {
|
||||
// maggot://0691e40aae02e552cfcb57af1dca56214680c0c5:0b557bbdf8718e95d352fbe994dec3a383e2ede7
|
||||
ihash = url.substring(MAGGOT.length()).trim();
|
||||
int col = ihash.indexOf(':');
|
||||
if (col >= 0)
|
||||
@@ -1438,7 +1449,27 @@ public class I2PSnarkServlet extends Default {
|
||||
_manager.addMessage(_("Invalid info hash in magnet URL {0}", url));
|
||||
return;
|
||||
}
|
||||
_manager.addMagnet(name, ih, true);
|
||||
_manager.addMagnet(name, ih, trackerURL, true);
|
||||
}
|
||||
|
||||
private static String getParam(String key, String uri) {
|
||||
int idx = uri.indexOf('?' + key + '=');
|
||||
if (idx >= 0) {
|
||||
idx += key.length() + 2;
|
||||
} else {
|
||||
idx = uri.indexOf('&' + key + '=');
|
||||
if (idx >= 0)
|
||||
idx += key.length() + 2;
|
||||
}
|
||||
if (idx < 0 || idx > uri.length())
|
||||
return null;
|
||||
String rv = uri.substring(idx);
|
||||
idx = rv.indexOf('&');
|
||||
if (idx >= 0)
|
||||
rv = rv.substring(0, idx);
|
||||
else
|
||||
rv = rv.trim();
|
||||
return rv;
|
||||
}
|
||||
|
||||
/** copied from ConfigTunnelsHelper */
|
||||
@@ -1643,8 +1674,8 @@ public class I2PSnarkServlet extends Default {
|
||||
|
||||
String hex = I2PSnarkUtil.toHex(snark.getInfoHash());
|
||||
buf.append("<br>").append(toImg("magnet", _("Magnet link"))).append(" <a href=\"")
|
||||
.append(MAGNET).append(hex).append("\">")
|
||||
.append(MAGNET).append(hex).append("</a>");
|
||||
.append(MAGNET_FULL).append(hex).append("\">")
|
||||
.append(MAGNET_FULL).append(hex).append("</a>");
|
||||
// We don't have the hash of the torrent file
|
||||
//buf.append("<br>").append(_("Maggot link")).append(": <a href=\"").append(MAGGOT).append(hex).append(':').append(hex).append("\">")
|
||||
// .append(MAGGOT).append(hex).append(':').append(hex).append("</a>");
|
||||
@@ -1833,7 +1864,8 @@ public class I2PSnarkServlet extends Default {
|
||||
icon = "html";
|
||||
else if (mime.equals("text/plain") || plc.endsWith(".nfo"))
|
||||
icon = "page";
|
||||
else if (mime.equals("application/java-archive") || plc.endsWith(".war"))
|
||||
else if (mime.equals("application/java-archive") || plc.endsWith(".war") ||
|
||||
plc.endsWith(".deb"))
|
||||
icon = "package";
|
||||
else if (plc.endsWith(".xpi2p"))
|
||||
icon = "plugin";
|
||||
|
||||
908
apps/i2psnark/locale/messages_en.po
Normal file
908
apps/i2psnark/locale/messages_en.po
Normal file
@@ -0,0 +1,908 @@
|
||||
# I2P
|
||||
# Copyright (C) 2009 The I2P Project
|
||||
# This file is distributed under the same license as the i2psnark package.
|
||||
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
||||
# foo <foo@bar>, 2009.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: I2P i2psnark\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-02-13 11:54+0000\n"
|
||||
"PO-Revision-Date: 2010-06-15 14:09+0100\n"
|
||||
"Last-Translator: duck <duck@mail.i2p>\n"
|
||||
"Language-Team: duck <duck@mail.i2p>\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"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:307
|
||||
#, java-format
|
||||
msgid "Total uploaders limit changed to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:309
|
||||
#, java-format
|
||||
msgid "Minimum total uploaders limit is {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:321
|
||||
#, java-format
|
||||
msgid "Up BW limit changed to {0}KBps"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:323
|
||||
#, java-format
|
||||
msgid "Minimum up bandwidth limit is {0}KBps"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:335
|
||||
#, java-format
|
||||
msgid "Startup delay changed to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:386
|
||||
msgid "I2CP and tunnel changes will take effect after stopping all torrents"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:393
|
||||
msgid "Disconnecting old I2CP destination"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:397
|
||||
#, java-format
|
||||
msgid "I2CP settings changed to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:402
|
||||
msgid ""
|
||||
"Unable to connect with the new settings, reverting to the old I2CP settings"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:406
|
||||
msgid "Unable to reconnect with the old settings!"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:408
|
||||
msgid "Reconnected on the new I2CP destination"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:418
|
||||
#, java-format
|
||||
msgid "I2CP listener restarted for \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:429
|
||||
msgid "Enabled autostart"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:431
|
||||
msgid "Disabled autostart"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:437
|
||||
msgid "Enabled open trackers - torrent restart required to take effect."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:439
|
||||
msgid "Disabled open trackers - torrent restart required to take effect."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:447
|
||||
msgid "Open Tracker list changed - torrent restart required to take effect."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:454
|
||||
#, java-format
|
||||
msgid "{0} theme loaded, return to main i2psnark page to view."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:461
|
||||
msgid "Configuration unchanged."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:471
|
||||
#, java-format
|
||||
msgid "Unable to save the config to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:536
|
||||
msgid "Connecting to I2P"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:539
|
||||
msgid "Error connecting to I2P - check your I2CP settings!"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:548
|
||||
#, java-format
|
||||
msgid "Error: Could not add the torrent {0}"
|
||||
msgstr ""
|
||||
|
||||
#. catch this here so we don't try do delete it below
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:570
|
||||
#, java-format
|
||||
msgid "Cannot open \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
#. TODO - if the existing one is a magnet, delete it and add the metainfo instead?
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:586
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:661
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:716
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1954
|
||||
#, java-format
|
||||
msgid "Torrent with this info hash is already running: {0}"
|
||||
msgstr ""
|
||||
|
||||
#. addMessage(_("Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and DHT only.", info.getName()));
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:593
|
||||
#, java-format
|
||||
msgid ""
|
||||
"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers "
|
||||
"only."
|
||||
msgstr ""
|
||||
|
||||
#. addMessage(_("Warning - No I2P trackers in \"{0}\", and DHT and open trackers are disabled, you should enable open trackers or DHT before starting the torrent.", info.getName()));
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:598
|
||||
#, java-format
|
||||
msgid ""
|
||||
"Warning - No I2P Trackers found in \"{0}\". Make sure Open Tracker is "
|
||||
"enabled before starting this torrent."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:619
|
||||
#, java-format
|
||||
msgid "Torrent in \"{0}\" is invalid"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:624
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1977
|
||||
#, java-format
|
||||
msgid "ERROR - Out of memory, cannot create torrent from {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:635
|
||||
#, java-format
|
||||
msgid "Torrent added and started: \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:637
|
||||
#, java-format
|
||||
msgid "Torrent added: \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:672
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:489
|
||||
#, java-format
|
||||
msgid "Fetching {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:675
|
||||
#, java-format
|
||||
msgid ""
|
||||
"We have no saved peers and no other torrents are running. Fetch of {0} will "
|
||||
"not succeed until you start another torrent."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:679
|
||||
#, java-format
|
||||
msgid "Adding {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:726
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:749
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1174
|
||||
#, java-format
|
||||
msgid "Failed to copy torrent file to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:972
|
||||
#, java-format
|
||||
msgid "Too many files in \"{0}\" ({1}), deleting it!"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:974
|
||||
#, java-format
|
||||
msgid "Torrent file \"{0}\" cannot end in \".torrent\", deleting it!"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:976
|
||||
#, java-format
|
||||
msgid "No pieces in \"{0}\", deleting it!"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:978
|
||||
#, java-format
|
||||
msgid "Too many pieces in \"{0}\", limit is {1}, deleting it!"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:980
|
||||
#, java-format
|
||||
msgid "Pieces are too large in \"{0}\" ({1}B), deleting it."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:981
|
||||
#, java-format
|
||||
msgid "Limit is {0}B"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:989
|
||||
#, java-format
|
||||
msgid "Torrents larger than {0}B are not supported yet, deleting \"{1}\""
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1005
|
||||
#, java-format
|
||||
msgid "Error: Could not remove the torrent {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1026
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1044
|
||||
#, java-format
|
||||
msgid "Torrent stopped: \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1065
|
||||
#, java-format
|
||||
msgid "Torrent removed: \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1073
|
||||
#, java-format
|
||||
msgid "Adding torrents in {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1122
|
||||
#, java-format
|
||||
msgid "Download finished: {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1170
|
||||
#, java-format
|
||||
msgid "Metainfo received for {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1171
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:524
|
||||
#, java-format
|
||||
msgid "Starting up torrent {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1225
|
||||
msgid "Unable to connect to I2P!"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:1231
|
||||
#, java-format
|
||||
msgid "Unable to add {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:205
|
||||
msgid "I2PSnark - Anonymous BitTorrent Client"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:218
|
||||
msgid "Torrents"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:221
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:228
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1007
|
||||
msgid "I2PSnark"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:225
|
||||
msgid "Refresh page"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:230
|
||||
msgid "Forum"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:284
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1698
|
||||
msgid "Status"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:290
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:292
|
||||
msgid "Hide Peers"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:297
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:299
|
||||
msgid "Show Peers"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:306
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1622
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1638
|
||||
msgid "Torrent"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:310
|
||||
msgid "Estimated time remaining"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: Please keep short or translate as " "
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:313
|
||||
msgid "ETA"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:317
|
||||
msgid "Downloaded"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: Please keep short or translate as " "
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:320
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:334
|
||||
msgid "RX"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:324
|
||||
msgid "Uploaded"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: Please keep short or translate as " "
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:327
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:344
|
||||
msgid "TX"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:332
|
||||
msgid "Down Rate"
|
||||
msgstr ""
|
||||
|
||||
#. Translators: Please keep short or translate as " "
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:337
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:346
|
||||
msgid "Rate"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:342
|
||||
msgid "Up Rate"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:364
|
||||
msgid "Stop all torrents and the I2P tunnel"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:366
|
||||
msgid "Stop All"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:375
|
||||
msgid "Start all torrents and the I2P tunnel"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:377
|
||||
msgid "Start All"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:396
|
||||
msgid "No torrents loaded."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:401
|
||||
msgid "Totals"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:403
|
||||
#, java-format
|
||||
msgid "1 torrent"
|
||||
msgid_plural "{0} torrents"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:406
|
||||
#, java-format
|
||||
msgid "1 connected peer"
|
||||
msgid_plural "{0} connected peers"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:495
|
||||
#, java-format
|
||||
msgid "Invalid URL: Must start with \"http://\", \"{0}\", or \"{1}\""
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:543
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:570
|
||||
#, java-format
|
||||
msgid "Magnet deleted: {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:551
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:576
|
||||
#, java-format
|
||||
msgid "Torrent file deleted: {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:582
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:592
|
||||
#, java-format
|
||||
msgid "Data file deleted: {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:584
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:594
|
||||
#, java-format
|
||||
msgid "Data file could not be deleted: {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:603
|
||||
#, java-format
|
||||
msgid "Data dir deleted: {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:636
|
||||
msgid "Error creating torrent - you must select a tracker"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:652
|
||||
#, java-format
|
||||
msgid "Torrent created for \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:654
|
||||
#, java-format
|
||||
msgid ""
|
||||
"Many I2P trackers require you to register new torrents before seeding - "
|
||||
"please do so before starting \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:656
|
||||
#, java-format
|
||||
msgid "Error creating a torrent for \"{0}\""
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:659
|
||||
#, java-format
|
||||
msgid "Cannot create a torrent for the nonexistent data: {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:662
|
||||
msgid "Error creating torrent - you must enter a file or directory"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:665
|
||||
msgid "Stopping all torrents and closing the I2P tunnel."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:676
|
||||
msgid "I2P tunnel closed."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:679
|
||||
msgid "Opening the I2P tunnel and starting all torrents."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:802
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:807
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:813
|
||||
msgid "Tracker Error"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:805
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:809
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:821
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:825
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:833
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:837
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:842
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:846
|
||||
#, java-format
|
||||
msgid "1 peer"
|
||||
msgid_plural "{0} peers"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:818
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:823
|
||||
msgid "Seeding"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:827
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1644
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1749
|
||||
msgid "Complete"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:830
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:835
|
||||
msgid "OK"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:839
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:844
|
||||
msgid "Stalled"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:848
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:851
|
||||
msgid "No Peers"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:853
|
||||
msgid "Stopped"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:864
|
||||
msgid "Torrent details"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:865
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1139
|
||||
msgid "Info"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:879
|
||||
msgid "View files"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:881
|
||||
msgid "Open file"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:893
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1785
|
||||
msgid "Open"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:939
|
||||
msgid "Stop the torrent"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:941
|
||||
msgid "Stop"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:950
|
||||
msgid "Start the torrent"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:952
|
||||
msgid "Start"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:962
|
||||
msgid "Remove the torrent from the active list, deleting the .torrent file"
|
||||
msgstr ""
|
||||
|
||||
#. Can't figure out how to escape double quotes inside the onclick string.
|
||||
#. Single quotes in translate strings with parameters must be doubled.
|
||||
#. Then the remaining single quite must be escaped
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:967
|
||||
#, java-format
|
||||
msgid ""
|
||||
"Are you sure you want to delete the file \\''{0}.torrent\\'' (downloaded "
|
||||
"data will not be deleted) ?"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:970
|
||||
msgid "Remove"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:980
|
||||
msgid "Delete the .torrent file and the associated data file(s)"
|
||||
msgstr ""
|
||||
|
||||
#. Can't figure out how to escape double quotes inside the onclick string.
|
||||
#. Single quotes in translate strings with parameters must be doubled.
|
||||
#. Then the remaining single quite must be escaped
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:985
|
||||
#, java-format
|
||||
msgid ""
|
||||
"Are you sure you want to delete the torrent \\''{0}\\'' and all downloaded "
|
||||
"data?"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:988
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1021
|
||||
msgid "Unknown"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1033
|
||||
msgid "Seed"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1056
|
||||
msgid "Uninteresting (The peer has no pieces we need)"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1058
|
||||
msgid "Choked (The peer is not allowing us to request pieces)"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1078
|
||||
msgid "Uninterested (We have no pieces the peer needs)"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1080
|
||||
msgid "Choking (We are not allowing the peer to request pieces)"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1138
|
||||
#, java-format
|
||||
msgid "Details at {0} tracker"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1167
|
||||
msgid "Add Torrent"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1169
|
||||
msgid "From URL"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1172
|
||||
msgid "Torrent file must originate from an I2P-based tracker"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1177
|
||||
msgid "Add torrent"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1180
|
||||
#, java-format
|
||||
msgid "You can also copy .torrent files to: {0}."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1182
|
||||
msgid "Removing a .torrent will cause it to stop."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1205
|
||||
msgid "Create Torrent"
|
||||
msgstr ""
|
||||
|
||||
#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>\n");
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1208
|
||||
msgid "Data to seed"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1212
|
||||
msgid "File or directory to seed (must be within the specified path)"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1214
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1663
|
||||
msgid "Tracker"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1216
|
||||
msgid "Select a tracker"
|
||||
msgstr ""
|
||||
|
||||
#. out.write(_("Open trackers and DHT only"));
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1221
|
||||
msgid "Open trackers only"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1236
|
||||
msgid "or"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1239
|
||||
msgid "Specify custom tracker announce URL"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1242
|
||||
msgid "Create torrent"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1260
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1399
|
||||
msgid "Configuration"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1264
|
||||
msgid "Data directory"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1266
|
||||
msgid "Edit i2psnark.config and restart to change"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1270
|
||||
msgid "Auto start"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1274
|
||||
msgid "If checked, automatically start torrents that are added"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1278
|
||||
msgid "Theme"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1291
|
||||
msgid "Startup delay"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1293
|
||||
msgid "minutes"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1317
|
||||
msgid "Total uploader limit"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1320
|
||||
msgid "peers"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1324
|
||||
msgid "Up bandwidth limit"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1327
|
||||
msgid "Half available bandwidth recommended."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1329
|
||||
msgid "View or change router bandwidth"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1333
|
||||
msgid "Use open trackers also"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1337
|
||||
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:1341
|
||||
msgid "Open tracker announce URLs"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1353
|
||||
msgid "Inbound Settings"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1359
|
||||
msgid "Outbound Settings"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1367
|
||||
msgid "I2CP host"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1372
|
||||
msgid "I2CP port"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1385
|
||||
msgid "I2CP options"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1390
|
||||
msgid "Save configuration"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1415
|
||||
#, java-format
|
||||
msgid "Invalid magnet URL {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1449
|
||||
#, java-format
|
||||
msgid "Invalid info hash in magnet URL {0}"
|
||||
msgstr ""
|
||||
|
||||
#. * dummies for translation
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1479
|
||||
#, java-format
|
||||
msgid "1 hop"
|
||||
msgid_plural "{0} hops"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1480
|
||||
#, java-format
|
||||
msgid "1 tunnel"
|
||||
msgid_plural "{0} tunnels"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1642
|
||||
msgid "Completion"
|
||||
msgstr ""
|
||||
|
||||
#. else unknown
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1646
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1695
|
||||
msgid "Size"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1651
|
||||
msgid "Files"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1653
|
||||
msgid "Pieces"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1654
|
||||
msgid "Piece size"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1676
|
||||
msgid "Magnet link"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1693
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1732
|
||||
msgid "Directory"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1702
|
||||
msgid "Priority"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1707
|
||||
msgid "Up to higher level directory"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1737
|
||||
msgid "Torrent not found?"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1746
|
||||
msgid "File not found in torrent?"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1759
|
||||
msgid "complete"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1760
|
||||
msgid "bytes remaining"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1811
|
||||
msgid "High"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1816
|
||||
msgid "Normal"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1821
|
||||
msgid "Skip"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1830
|
||||
msgid "Save priorities"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1945
|
||||
#, java-format
|
||||
msgid "Torrent fetched from {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1967
|
||||
#, java-format
|
||||
msgid "Torrent already running: {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1969
|
||||
#, java-format
|
||||
msgid "Torrent already in the queue: {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1975
|
||||
#, java-format
|
||||
msgid "Torrent at {0} was not valid"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1982
|
||||
#, java-format
|
||||
msgid "Torrent was not retrieved from {0}"
|
||||
msgstr ""
|
||||
@@ -15,6 +15,7 @@ msgstr ""
|
||||
"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"
|
||||
"X-Poedit-Language: French\n"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:94
|
||||
@@ -35,17 +36,17 @@ msgstr "La limite minimale agrégée des uploaders est : {0}"
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:310
|
||||
#, java-format
|
||||
msgid "Up BW limit changed to {0}KBps"
|
||||
msgstr "La limite d'upload modifiée : {0} Ko/s"
|
||||
msgstr "La limite d’upload modifiée : {0} Ko/s"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:312
|
||||
#, java-format
|
||||
msgid "Minimum up bandwidth limit is {0}KBps"
|
||||
msgstr "La limite minimale d'upload est {0} Ko/s"
|
||||
msgstr "La limite minimale d’upload est {0} Ko/s"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:324
|
||||
#, java-format
|
||||
msgid "Startup delay limit changed to {0} minutes"
|
||||
msgstr "Delais de démarrage modifié : {0] minutes"
|
||||
msgstr "Delais de démarrage modifié : {0} minutes"
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:371
|
||||
msgid "I2CP and tunnel changes will take effect after stopping all torrents"
|
||||
@@ -122,13 +123,13 @@ msgstr "Erreur de connexion à I2P - Vérifiez vos paramètres I2CP!"
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:506
|
||||
#, java-format
|
||||
msgid "Error: Could not add the torrent {0}"
|
||||
msgstr "Erreur : Impossible d'ajouter le torrent : {0}"
|
||||
msgstr "Erreur : Impossible d’ajouter le torrent : {0}"
|
||||
|
||||
#. catch this here so we don't try do delete it below
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:528
|
||||
#, java-format
|
||||
msgid "Cannot open \"{0}\""
|
||||
msgstr "Impossible d'ouvrir: \"{0}\""
|
||||
msgstr "Impossible d’ouvrir: \"{0}\""
|
||||
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:541
|
||||
#, java-format
|
||||
@@ -217,7 +218,7 @@ msgstr "Impossible de se connecter à I2P!"
|
||||
#: ../java/src/org/klomp/snark/SnarkManager.java:886
|
||||
#, java-format
|
||||
msgid "Unable to add {0}"
|
||||
msgstr "Impossible d'ajouter {0}"
|
||||
msgstr "Impossible d’ajouter {0}"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:185
|
||||
msgid "I2PSnark - Anonymous BitTorrent Client"
|
||||
@@ -394,7 +395,7 @@ msgstr "Torrent créé pour \"{0}\""
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:605
|
||||
#, java-format
|
||||
msgid "Many I2P trackers require you to register new torrents before seeding - please do so before starting \"{0}\""
|
||||
msgstr "De nombreux trackers I2P nécessitent d'enregistrer les nouveaux torrents avant de seeder - faites-le avant de démarrer \"{0}\"!"
|
||||
msgstr "De nombreux trackers I2P nécessitent d’enregistrer les nouveaux torrents avant de seeder - faites-le avant de démarrer \"{0}\"!"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:607
|
||||
#, java-format
|
||||
@@ -505,7 +506,7 @@ msgstr "Arrêter"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:921
|
||||
msgid "Start the torrent"
|
||||
msgstr "Arrêter le torrent"
|
||||
msgstr "Démarrer le torrent"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:923
|
||||
msgid "Start"
|
||||
@@ -805,7 +806,7 @@ msgstr "Le torrent {0} n'est pas valide"
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1764
|
||||
#, java-format
|
||||
msgid "Torrent was not retrieved from {0}"
|
||||
msgstr "Le torrent n'a pas été reçu par {0}"
|
||||
msgstr "Le torrent n’a pas été reçu par {0}"
|
||||
|
||||
#~ msgid "size: {0}B"
|
||||
#~ msgstr "Taille: {0}Octets"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,17 +0,0 @@
|
||||
#
|
||||
# Update messages_xx.po and messages_xx.class files,
|
||||
# from both java and jsp sources.
|
||||
# Requires installed programs xgettext, msgfmt, msgmerge, and find.
|
||||
# zzz - public domain
|
||||
#
|
||||
|
||||
## launching sh.exe with -login parameter will open a shell with the current path always pointing to \bin\
|
||||
## need to cd into our orignal path - where we call sh.exe from.
|
||||
|
||||
cd $CALLFROM
|
||||
## echo $PWD
|
||||
|
||||
## except this everything is the same with bundle-message.sh
|
||||
## walking - public domain :-D
|
||||
|
||||
source bundle-messages.sh $PARAS
|
||||
@@ -48,15 +48,14 @@
|
||||
<target name="bundle" depends="compile, precompilejsp">
|
||||
<!-- Update the messages_*.po files.
|
||||
We need to supply the bat file for windows, and then change the fail property to true -->
|
||||
<exec executable="sh" osfamily="unix" failifexecutionfails="false" >
|
||||
<exec executable="sh" osfamily="unix" failifexecutionfails="true" >
|
||||
<arg value="./bundle-messages.sh" />
|
||||
</exec>
|
||||
<exec executable="sh" osfamily="mac" failifexecutionfails="false" >
|
||||
<exec executable="sh" osfamily="mac" failifexecutionfails="true" >
|
||||
<arg value="./bundle-messages.sh" />
|
||||
</exec>
|
||||
<exec executable="cmd" osfamily="windows" failifexecutionfails="false" >
|
||||
<arg value="/c" />
|
||||
<arg value="bundle-messages.bat" />
|
||||
<exec executable="sh" osfamily="windows" failifexecutionfails="true" >
|
||||
<arg value="./bundle-messages.sh" />
|
||||
</exec>
|
||||
</target>
|
||||
|
||||
@@ -70,9 +69,8 @@
|
||||
<arg value="./bundle-messages.sh" />
|
||||
<arg value="-p" />
|
||||
</exec>
|
||||
<exec executable="cmd" osfamily="windows" failifexecutionfails="true" >
|
||||
<arg value="/c" />
|
||||
<arg value="bundle-messages.bat" />
|
||||
<exec executable="sh" osfamily="windows" failifexecutionfails="true" >
|
||||
<arg value="./bundle-messages.sh" />
|
||||
<arg value="-p" />
|
||||
</exec>
|
||||
</target>
|
||||
@@ -141,6 +139,52 @@
|
||||
splitindex="true"
|
||||
windowtitle="I2PTunnel" />
|
||||
</target>
|
||||
|
||||
<target name="compileTest">
|
||||
<mkdir dir="./build" />
|
||||
<mkdir dir="./build/obj" />
|
||||
<javac srcdir="./src:./test" debug="true" source="1.5" target="1.5" deprecation="on" destdir="./build/obj" >
|
||||
<compilerarg line="${javac.compilerargs}" />
|
||||
<classpath>
|
||||
<pathelement location="../../../core/java/build/i2p.jar" />
|
||||
<pathelement location="../../ministreaming/java/build/mstreaming.jar" />
|
||||
</classpath>
|
||||
</javac>
|
||||
</target>
|
||||
<target name="test" depends="clean, compileTest">
|
||||
<junit printsummary="on" fork="yes">
|
||||
<classpath>
|
||||
<pathelement path="${classpath}" />
|
||||
<pathelement location="./build/obj" />
|
||||
<pathelement location="../../../core/java/build/i2p.jar" />
|
||||
</classpath>
|
||||
<batchtest>
|
||||
<fileset dir="./test/">
|
||||
<include name="**/*Test.java" />
|
||||
</fileset>
|
||||
</batchtest>
|
||||
<formatter type="xml"/>
|
||||
</junit>
|
||||
<mkdir dir="../../../reports/" />
|
||||
<mkdir dir="../../../reports/i2ptunnel/" />
|
||||
<mkdir dir="../../../reports/i2ptunnel/junit/" />
|
||||
<delete>
|
||||
<fileset dir="../../../reports/i2ptunnel/junit">
|
||||
<include name="TEST-*.xml"/>
|
||||
</fileset>
|
||||
</delete>
|
||||
<copy todir="../../../reports/i2ptunnel/junit">
|
||||
<fileset dir=".">
|
||||
<include name="TEST-*.xml"/>
|
||||
</fileset>
|
||||
</copy>
|
||||
<delete>
|
||||
<fileset dir=".">
|
||||
<include name="TEST-*.xml"/>
|
||||
</fileset>
|
||||
</delete>
|
||||
</target>
|
||||
|
||||
<target name="clean">
|
||||
<delete dir="./build" />
|
||||
<delete dir="../jsp/WEB-INF/" />
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
@echo off
|
||||
set Callfrom=%cd%
|
||||
set Paras=%1
|
||||
|
||||
rem before calling make sure you have msys and mingw 's "bin" path
|
||||
rem in your current searching path
|
||||
rem type "set path" to check
|
||||
if not exist ..\locale\*.only goto updateALL
|
||||
|
||||
rem put a messages_xx.only(eg messages_zh.only) into locale folder
|
||||
rem this script will only touch the po file(eg zh) you specified, leaving other po files untact.
|
||||
|
||||
for %%i in (..\locale\*.only) do set PO=%%~ni
|
||||
echo [Notice] Yu choose to Ony update the choosen file: %PO%.po
|
||||
for %%i in (..\locale\*.po) do if not %%~ni==%PO% ren %%i %%~ni.po-
|
||||
|
||||
call sh --login %cd%\bmsg.sh
|
||||
|
||||
for %%i in (..\locale\*.po-) do if not %%~ni==%PO% ren %%i %%~ni.po
|
||||
goto end
|
||||
|
||||
:updateALL
|
||||
call sh --login %cd%\bmsg.sh
|
||||
|
||||
:end
|
||||
echo End of Message Bundling
|
||||
@@ -18,6 +18,17 @@ then
|
||||
POUPDATE=1
|
||||
fi
|
||||
|
||||
# on windows, one must specify the path of commnad find
|
||||
# since windows has its own retarded version of find.
|
||||
if which find|grep -q -i windows ; then
|
||||
export PATH=.:/bin:/usr/local/bin:$PATH
|
||||
fi
|
||||
# Fast mode - update ondemond
|
||||
echo Placing a file named messages_{LangCode}.only in locale folder,
|
||||
echo will limit .po file update to the language specified by {LangCode}.
|
||||
LG2=$(find ../locale -iname messages_*.only|tail -1)
|
||||
[ LG2 ] && LG2=${LG2#../locale/messages_} && LG2=${LG2%.only}
|
||||
|
||||
# add ../java/ so the refs will work in the po file
|
||||
JPATHS="../java/src ../jsp/WEB-INF"
|
||||
for i in ../locale/messages_*.po
|
||||
@@ -26,6 +37,11 @@ do
|
||||
LG=${i#../locale/messages_}
|
||||
LG=${LG%.po}
|
||||
|
||||
# skip, if specified
|
||||
if [ $LG2 ]; then
|
||||
[ $LG != $LG2 ] && continue || echo INFO: Language update is set to [$LG2] only.
|
||||
fi
|
||||
|
||||
if [ "$POUPDATE" = "1" ]
|
||||
then
|
||||
# make list of java files newer than the .po file
|
||||
@@ -72,15 +88,19 @@ do
|
||||
touch $i
|
||||
fi
|
||||
|
||||
echo "Generating ${CLASS}_$LG ResourceBundle..."
|
||||
if [ "$LG" != "en" ]
|
||||
then
|
||||
# only generate for non-source language
|
||||
echo "Generating ${CLASS}_$LG ResourceBundle..."
|
||||
|
||||
# convert to class files in build/obj
|
||||
msgfmt --java --statistics -r $CLASS -l $LG -d ../jsp/WEB-INF/classes $i
|
||||
if [ $? -ne 0 ]
|
||||
then
|
||||
echo 'Warning - msgfmt failed, not updating translations'
|
||||
break
|
||||
fi
|
||||
# convert to class files in build/obj
|
||||
msgfmt --java --statistics -r $CLASS -l $LG -d ../jsp/WEB-INF/classes $i
|
||||
if [ $? -ne 0 ]
|
||||
then
|
||||
echo 'Warning - msgfmt failed, not updating translations'
|
||||
break
|
||||
fi
|
||||
fi
|
||||
done
|
||||
rm -f $TMPFILE
|
||||
# todo: return failure
|
||||
|
||||
@@ -169,6 +169,9 @@ public class I2PTunnelConnectClient extends I2PTunnelHTTPClientBase implements R
|
||||
// Use this rather than BufferedReader because we can't have readahead,
|
||||
// since we are passing the stream on to I2PTunnelRunner
|
||||
line = DataHelper.readLine(in);
|
||||
if(line == null) {
|
||||
break;
|
||||
}
|
||||
line = line.trim();
|
||||
if (_log.shouldLog(Log.DEBUG))
|
||||
_log.debug(getPrefix(requestId) + "Line=[" + line + "]");
|
||||
|
||||
@@ -10,7 +10,11 @@ import java.io.OutputStream;
|
||||
import java.net.InetAddress;
|
||||
import java.net.Socket;
|
||||
import java.net.SocketException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
import java.util.zip.GZIPOutputStream;
|
||||
|
||||
@@ -94,23 +98,24 @@ public class I2PTunnelHTTPServer extends I2PTunnelServer {
|
||||
InputStream in = socket.getInputStream();
|
||||
|
||||
StringBuilder command = new StringBuilder(128);
|
||||
Properties headers = readHeaders(in, command,
|
||||
Map<String, List<String>> headers = readHeaders(in, command,
|
||||
CLIENT_SKIPHEADERS, getTunnel().getContext());
|
||||
headers.setProperty(HASH_HEADER, socket.getPeerDestination().calculateHash().toBase64());
|
||||
headers.setProperty(DEST32_HEADER, Base32.encode(socket.getPeerDestination().calculateHash().getData()) + ".b32.i2p" );
|
||||
headers.setProperty(DEST64_HEADER, socket.getPeerDestination().toBase64());
|
||||
|
||||
addEntry(headers, HASH_HEADER, socket.getPeerDestination().calculateHash().toBase64());
|
||||
addEntry(headers, DEST32_HEADER, Base32.encode(socket.getPeerDestination().calculateHash().getData()) + ".b32.i2p");
|
||||
addEntry(headers, DEST64_HEADER, socket.getPeerDestination().toBase64());
|
||||
|
||||
if ( (_spoofHost != null) && (_spoofHost.trim().length() > 0) )
|
||||
headers.setProperty("Host", _spoofHost);
|
||||
headers.setProperty("Connection", "close");
|
||||
setEntry(headers, "Host", _spoofHost);
|
||||
setEntry(headers, "Connection", "close");
|
||||
// we keep the enc sent by the browser before clobbering it, since it may have
|
||||
// been x-i2p-gzip
|
||||
String enc = headers.getProperty("Accept-encoding");
|
||||
String altEnc = headers.getProperty("X-Accept-encoding");
|
||||
String enc = getEntryOrNull(headers, "Accept-encoding");
|
||||
String altEnc = getEntryOrNull(headers, "X-Accept-encoding");
|
||||
|
||||
// according to rfc2616 s14.3, this *should* force identity, even if
|
||||
// "identity;q=1, *;q=0" didn't.
|
||||
headers.setProperty("Accept-encoding", "");
|
||||
setEntry(headers, "Accept-encoding", "");
|
||||
String modifiedHeader = formatHeaders(headers, command);
|
||||
|
||||
//String modifiedHeader = getModifiedHeader(socket);
|
||||
@@ -234,7 +239,7 @@ public class I2PTunnelHTTPServer extends I2PTunnelServer {
|
||||
|
||||
//Change headers to protect server identity
|
||||
StringBuilder command = new StringBuilder(128);
|
||||
Properties headers = readHeaders(serverin, command,
|
||||
Map<String, List<String>> headers = readHeaders(serverin, command,
|
||||
SERVER_SKIPHEADERS, _ctx);
|
||||
String modifiedHeaders = formatHeaders(headers, command);
|
||||
compressedOut.write(modifiedHeaders.getBytes());
|
||||
@@ -360,13 +365,14 @@ public class I2PTunnelHTTPServer extends I2PTunnelServer {
|
||||
}
|
||||
}
|
||||
|
||||
private static String formatHeaders(Properties headers, StringBuilder command) {
|
||||
protected static String formatHeaders(Map<String, List<String>> headers, StringBuilder command) {
|
||||
StringBuilder buf = new StringBuilder(command.length() + headers.size() * 64);
|
||||
buf.append(command.toString().trim()).append("\r\n");
|
||||
for (Iterator iter = headers.keySet().iterator(); iter.hasNext(); ) {
|
||||
for (Iterator<String> iter = headers.keySet().iterator(); iter.hasNext(); ) {
|
||||
String name = (String)iter.next();
|
||||
String val = headers.getProperty(name);
|
||||
buf.append(name.trim()).append(": ").append(val.trim()).append("\r\n");
|
||||
for(String val: headers.get(name)) {
|
||||
buf.append(name.trim()).append(": ").append(val.trim()).append("\r\n");
|
||||
}
|
||||
}
|
||||
buf.append("\r\n");
|
||||
return buf.toString();
|
||||
@@ -374,9 +380,46 @@ public class I2PTunnelHTTPServer extends I2PTunnelServer {
|
||||
|
||||
/** ridiculously long, just to prevent OOM DOS @since 0.7.13 */
|
||||
private static final int MAX_HEADERS = 60;
|
||||
|
||||
/**
|
||||
* Add an entry to the multimap.
|
||||
*/
|
||||
private static void addEntry(Map<String, List<String>> headers, String key, String value) {
|
||||
List<String> entry = headers.get(key);
|
||||
if(entry == null) {
|
||||
headers.put(key, entry = new ArrayList<String>());
|
||||
}
|
||||
entry.add(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the other matching entries and set this entry as the only one.
|
||||
*/
|
||||
private static void setEntry(Map<String, List<String>> headers, String key, String value) {
|
||||
List<String> entry = headers.get(key);
|
||||
if(entry == null) {
|
||||
headers.put(key, entry = new ArrayList<String>());
|
||||
}
|
||||
entry.clear();
|
||||
entry.add(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the first matching entry in the multimap
|
||||
* @return the first matching entry or null
|
||||
*/
|
||||
private static String getEntryOrNull(Map<String, List<String>> headers, String key) {
|
||||
List<String> entries = headers.get(key);
|
||||
if(entries == null || entries.size() < 1) {
|
||||
return null;
|
||||
}
|
||||
else {
|
||||
return entries.get(0);
|
||||
}
|
||||
}
|
||||
|
||||
private static Properties readHeaders(InputStream in, StringBuilder command, String[] skipHeaders, I2PAppContext ctx) throws IOException {
|
||||
Properties headers = new Properties();
|
||||
protected static Map<String, List<String>> readHeaders(InputStream in, StringBuilder command, String[] skipHeaders, I2PAppContext ctx) throws IOException {
|
||||
HashMap<String, List<String>> headers = new HashMap<String, List<String>>();
|
||||
StringBuilder buf = new StringBuilder(128);
|
||||
|
||||
boolean ok = DataHelper.readLine(in, command);
|
||||
@@ -438,7 +481,7 @@ public class I2PTunnelHTTPServer extends I2PTunnelServer {
|
||||
continue;
|
||||
}
|
||||
|
||||
headers.setProperty(name, value);
|
||||
addEntry(headers, name, value);
|
||||
//if (_log.shouldLog(Log.DEBUG))
|
||||
// _log.debug("Read the header [" + name + "] = [" + value + "]");
|
||||
}
|
||||
|
||||
@@ -1,18 +1,15 @@
|
||||
package net.i2p.i2ptunnel;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
import java.util.Set;
|
||||
import java.util.TreeMap;
|
||||
|
||||
import net.i2p.I2PAppContext;
|
||||
import net.i2p.client.I2PSession;
|
||||
@@ -20,7 +17,7 @@ import net.i2p.client.I2PSessionException;
|
||||
import net.i2p.data.DataHelper;
|
||||
import net.i2p.util.I2PAppThread;
|
||||
import net.i2p.util.Log;
|
||||
import net.i2p.util.SecureFileOutputStream;
|
||||
import net.i2p.util.OrderedProperties;
|
||||
|
||||
/**
|
||||
* Coordinate a set of tunnels within the JVM, loading and storing their config
|
||||
@@ -223,14 +220,15 @@ public class TunnelControllerGroup {
|
||||
* file
|
||||
*
|
||||
*/
|
||||
public void saveConfig() {
|
||||
public void saveConfig() throws IOException {
|
||||
saveConfig(_configFile);
|
||||
}
|
||||
|
||||
/**
|
||||
* Save the configuration of all known tunnels to the given file
|
||||
*
|
||||
*/
|
||||
public void saveConfig(String configFile) {
|
||||
public void saveConfig(String configFile) throws IOException {
|
||||
_configFile = configFile;
|
||||
File cfgFile = new File(configFile);
|
||||
if (!cfgFile.isAbsolute())
|
||||
@@ -239,32 +237,14 @@ public class TunnelControllerGroup {
|
||||
if ( (parent != null) && (!parent.exists()) )
|
||||
parent.mkdirs();
|
||||
|
||||
|
||||
TreeMap map = new TreeMap();
|
||||
Properties map = new OrderedProperties();
|
||||
for (int i = 0; i < _controllers.size(); i++) {
|
||||
TunnelController controller = _controllers.get(i);
|
||||
Properties cur = controller.getConfig("tunnel." + i + ".");
|
||||
map.putAll(cur);
|
||||
}
|
||||
|
||||
StringBuilder buf = new StringBuilder(1024);
|
||||
for (Iterator iter = map.keySet().iterator(); iter.hasNext(); ) {
|
||||
String key = (String)iter.next();
|
||||
String val = (String)map.get(key);
|
||||
buf.append(key).append('=').append(val).append('\n');
|
||||
}
|
||||
|
||||
FileOutputStream fos = null;
|
||||
try {
|
||||
fos = new SecureFileOutputStream(cfgFile);
|
||||
fos.write(buf.toString().getBytes("UTF-8"));
|
||||
if (_log.shouldLog(Log.INFO))
|
||||
_log.info("Config written to " + cfgFile.getPath());
|
||||
} catch (IOException ioe) {
|
||||
_log.error("Error writing out the config");
|
||||
} finally {
|
||||
if (fos != null) try { fos.close(); } catch (IOException ioe) {}
|
||||
}
|
||||
DataHelper.storeProps(map, cfgFile);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -115,7 +115,7 @@ public class EditBean extends IndexBean {
|
||||
if (tun != null)
|
||||
return "true".equalsIgnoreCase(tun.getSharedClient());
|
||||
else
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean shouldDelay(int tunnel) {
|
||||
|
||||
@@ -8,7 +8,7 @@ package net.i2p.i2ptunnel.web;
|
||||
*
|
||||
*/
|
||||
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
@@ -17,6 +17,7 @@ import java.util.Map;
|
||||
import java.util.Properties;
|
||||
import java.util.Set;
|
||||
import java.util.StringTokenizer;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import net.i2p.I2PAppContext;
|
||||
import net.i2p.data.Base32;
|
||||
@@ -299,14 +300,22 @@ public class IndexBean {
|
||||
}
|
||||
}
|
||||
|
||||
List msgs = doSave();
|
||||
msgs.add(0, "Changes saved");
|
||||
List<String> msgs = doSave();
|
||||
return getMessages(msgs);
|
||||
}
|
||||
private List doSave() {
|
||||
_group.saveConfig();
|
||||
return _group.clearAllMessages();
|
||||
|
||||
private List<String> doSave() {
|
||||
List<String> rv = _group.clearAllMessages();
|
||||
try {
|
||||
_group.saveConfig();
|
||||
rv.add(0, _("Configuration changes saved"));
|
||||
} catch (IOException ioe) {
|
||||
_log.error("Failed to save config file", ioe);
|
||||
rv.add(0, _("Failed to save configuration") + ": " + ioe.toString());
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
private String deleteTunnel() {
|
||||
if (!_removeConfirmed)
|
||||
return "Please confirm removal";
|
||||
@@ -1095,16 +1104,16 @@ public class IndexBean {
|
||||
return null;
|
||||
}
|
||||
|
||||
private static String getMessages(List msgs) {
|
||||
private static String getMessages(List<String> msgs) {
|
||||
StringBuilder buf = new StringBuilder(128);
|
||||
getMessages(msgs, buf);
|
||||
return buf.toString();
|
||||
}
|
||||
|
||||
private static void getMessages(List msgs, StringBuilder buf) {
|
||||
private static void getMessages(List<String> msgs, StringBuilder buf) {
|
||||
if (msgs == null) return;
|
||||
for (int i = 0; i < msgs.size(); i++) {
|
||||
buf.append((String)msgs.get(i)).append("\n");
|
||||
buf.append(msgs.get(i)).append("\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
package net.i2p.i2ptunnel;
|
||||
|
||||
import java.io.BufferedWriter;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.util.Map;
|
||||
import java.util.List;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
public class I2PTunnelHTTPServerTest extends TestCase {
|
||||
|
||||
public InputStream fillInputStream(String headers) throws IOException {
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(baos));
|
||||
bw.write(headers);
|
||||
bw.flush();
|
||||
byte[] bytes = baos.toByteArray();
|
||||
return new ByteArrayInputStream(bytes);
|
||||
}
|
||||
|
||||
public void testSimpleHeader() throws IOException {
|
||||
String headerString = "GET /blah HTTP/1.1\r\n";
|
||||
headerString += "BLAH: something\r\n";
|
||||
headerString += "\r\n";
|
||||
InputStream in = fillInputStream(headerString);
|
||||
Map<String, List<String>> headers = I2PTunnelHTTPServer.readHeaders(in, new StringBuilder(128), new String[0], null);
|
||||
assertEquals(headers.size(), 1); //One header
|
||||
}
|
||||
|
||||
public void testDuplicateHeader() throws IOException {
|
||||
String headerString = "GET /something HTTP/1.1\r\n";
|
||||
headerString += "someHeader: blabla bla bloooo\r\n";
|
||||
headerString += "someHeader: oh my, duplication!\r\n";
|
||||
headerString += "\r\n";
|
||||
InputStream in = fillInputStream(headerString);
|
||||
Map<String, List<String>> headers = I2PTunnelHTTPServer.readHeaders(in, new StringBuilder(128), new String[0], null);
|
||||
assertEquals(headers.size(), 1);
|
||||
assertEquals(headers.get("someHeader").size(), 2);
|
||||
}
|
||||
|
||||
public void testDuplicateHeadersFormat() throws IOException {
|
||||
String headerString = "GET /something HTTP/1.1\r\n";
|
||||
headerString += "abc: def\r\n";
|
||||
headerString += "abc: blaaah\r\n";
|
||||
headerString += "manamana: toe toe toedoedoe\r\n";
|
||||
headerString += "\r\n";
|
||||
InputStream in = fillInputStream(headerString);
|
||||
StringBuilder builder = new StringBuilder(128);
|
||||
Map<String, List<String>> headers = I2PTunnelHTTPServer.readHeaders(in, builder, new String[0], null);
|
||||
String result = I2PTunnelHTTPServer.formatHeaders(headers, builder);
|
||||
int first = result.indexOf("abc");
|
||||
assertTrue(first >= 0);
|
||||
int second = result.indexOf("abc", first);
|
||||
assertTrue(second >= 0);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -374,7 +374,7 @@
|
||||
|
||||
<div class="rowItem">
|
||||
<div id="optionsField" class="rowItem">
|
||||
<label><%=intl._("Inbound connection limits (0 to disable)")%><br><%=intl._("Per client")%>:</label>
|
||||
<label><%=intl._("Inbound connection limits (0=unlimited)")%><br><%=intl._("Per client")%>:</label>
|
||||
</div>
|
||||
<div id="portField" class="rowItem">
|
||||
<label><%=intl._("Per minute")%>:</label>
|
||||
@@ -405,7 +405,7 @@
|
||||
</div>
|
||||
<div class="rowItem">
|
||||
<div id="optionsField" class="rowItem">
|
||||
<label><%=intl._("Max concurrent connections (0 to disable)")%>:</label>
|
||||
<label><%=intl._("Max concurrent connections (0=unlimited)")%>:</label>
|
||||
</div>
|
||||
<div id="portField" class="rowItem">
|
||||
<input type="text" id="port" name="maxStreams" value="<%=editBean.getMaxStreams(curTunnel)%>" class="freetext" />
|
||||
|
||||
779
apps/i2ptunnel/locale/messages_en.po
Normal file
779
apps/i2ptunnel/locale/messages_en.po
Normal file
@@ -0,0 +1,779 @@
|
||||
# I2P
|
||||
# Copyright (C) 2009 The I2P Project
|
||||
# This file is distributed under the same license as the i2ptunnel package.
|
||||
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
||||
# foo <foo@bar>, 2009.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: I2P i2ptunnel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-02-13 19:26+0000\n"
|
||||
"PO-Revision-Date: 2010-06-15 14:09+0100\n"
|
||||
"Last-Translator: duck <duck@mail.i2p>\n"
|
||||
"Language-Team: duck <duck@mail.i2p>\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"
|
||||
|
||||
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:474
|
||||
#, java-format
|
||||
msgid ""
|
||||
"To visit the destination in your host database, click <a href=\"{0}\">here</"
|
||||
"a>. To visit the conflicting addresshelper destination, click <a href=\"{1}"
|
||||
"\">here</a>."
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:931
|
||||
msgid ""
|
||||
"Click a link below to look for an address helper by using a \"jump\" service:"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/net/i2p/i2ptunnel/web/EditBean.java:326
|
||||
#: ../java/src/net/i2p/i2ptunnel/web/EditBean.java:336
|
||||
msgid "internal"
|
||||
msgstr ""
|
||||
|
||||
#: ../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: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:230
|
||||
msgid "Starting tunnel"
|
||||
msgstr ""
|
||||
|
||||
#. and give them something to look at in any case
|
||||
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:243
|
||||
msgid "Stopping tunnel"
|
||||
msgstr ""
|
||||
|
||||
#: ../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:418
|
||||
msgid "Standard client"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:419
|
||||
msgid "HTTP client"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:420
|
||||
msgid "IRC client"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:421
|
||||
msgid "Standard server"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:422
|
||||
msgid "HTTP server"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:423
|
||||
msgid "SOCKS 4/4a/5 proxy"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:424
|
||||
msgid "SOCKS IRC proxy"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:425
|
||||
msgid "CONNECT/SSL/HTTPS proxy"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:426
|
||||
msgid "IRC server"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:427
|
||||
msgid "Streamr client"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:428
|
||||
msgid "Streamr server"
|
||||
msgstr ""
|
||||
|
||||
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:429
|
||||
msgid "HTTP bidir"
|
||||
msgstr ""
|
||||
|
||||
#: ../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:521
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:272
|
||||
msgid "Port not set"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:73
|
||||
msgid "I2P Tunnel Manager - Edit Client Tunnel"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:93
|
||||
msgid "Edit proxy settings"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:101
|
||||
msgid "New proxy settings"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:112
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:112
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:107
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:121
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:242
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:257
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:116
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:116
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:246
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:279
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:120
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:120
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:226
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:386
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:126
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:136
|
||||
msgid "Target"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:130
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:132
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:162
|
||||
msgid "Access Point"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:137
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:150
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:192
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:153
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:167
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:213
|
||||
msgid "required"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:159
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:178
|
||||
msgid "Reachable by"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:180
|
||||
msgid "Outproxies"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:187
|
||||
msgid "Tunnel Destination"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:199
|
||||
msgid "name or destination"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:202
|
||||
msgid "b32 not recommended"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:208
|
||||
msgid "Shared Client"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:212
|
||||
msgid ""
|
||||
"(Share tunnels with other clients and irc/httpclients? Change requires "
|
||||
"restart of client proxy)"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:216
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:124
|
||||
msgid "Auto Start"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:220
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:128
|
||||
msgid "(Check the Box for 'YES')"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:222
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:243
|
||||
msgid "Advanced networking options"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:224
|
||||
msgid ""
|
||||
"(NOTE: when this client proxy is configured to share tunnels, then these "
|
||||
"options are for all the shared proxy clients!)"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:226
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:245
|
||||
msgid "Tunnel Options"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:228
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:247
|
||||
msgid "Length"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:235
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:254
|
||||
msgid "0 hop tunnel (low anonymity, low latency)"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:239
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:258
|
||||
msgid "1 hop tunnel (medium anonymity, medium latency)"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:243
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:262
|
||||
msgid "2 hop tunnel (high anonymity, high latency)"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:247
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:266
|
||||
msgid "3 hop tunnel (very high anonymity, poor performance)"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:256
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:275
|
||||
msgid "hop tunnel (very poor performance)"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:261
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:280
|
||||
msgid "Variance"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:268
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:287
|
||||
msgid "0 hop variance (no randomisation, consistant performance)"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:272
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:291
|
||||
msgid ""
|
||||
"+ 0-1 hop variance (medium additive randomisation, subtractive performance)"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:276
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:295
|
||||
msgid ""
|
||||
"+ 0-2 hop variance (high additive randomisation, subtractive performance)"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:280
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:299
|
||||
msgid "+/- 0-1 hop variance (standard randomisation, standard performance)"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:284
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:303
|
||||
msgid "+/- 0-2 hop variance (not recommended)"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:296
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:315
|
||||
msgid "hop variance"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:301
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:320
|
||||
msgid "Count"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:308
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:327
|
||||
msgid "1 inbound, 1 outbound tunnel (low bandwidth usage, less reliability)"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:312
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:331
|
||||
msgid ""
|
||||
"2 inbound, 2 outbound tunnels (standard bandwidth usage, standard "
|
||||
"reliability)"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:316
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:335
|
||||
msgid ""
|
||||
"3 inbound, 3 outbound tunnels (higher bandwidth usage, higher reliability)"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:325
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:344
|
||||
msgid "tunnels"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:330
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:349
|
||||
msgid "Backup Count"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:337
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:356
|
||||
msgid "0 backup tunnels (0 redundancy, no added resource usage)"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:341
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:360
|
||||
msgid "1 backup tunnel each direction (low redundancy, low resource usage)"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:345
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:364
|
||||
msgid ""
|
||||
"2 backup tunnels each direction (medium redundancy, medium resource usage)"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:349
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:368
|
||||
msgid "3 backup tunnels each direction (high redundancy, high resource usage)"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:358
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:377
|
||||
msgid "backup tunnels"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:365
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:384
|
||||
msgid "Profile"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:372
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:391
|
||||
msgid "interactive connection"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:376
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:395
|
||||
msgid "bulk connection (downloads/websites/BT)"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:378
|
||||
msgid "Delay Connect"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:382
|
||||
msgid "for request/response connections"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:386
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:399
|
||||
msgid "Router I2CP Address"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:388
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:142
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:401
|
||||
msgid "Host"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:396
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:148
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:409
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:244
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:266
|
||||
msgid "Port"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:406
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:479
|
||||
msgid "Reduce tunnel quantity when idle"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:408
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:422
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:430
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:442
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:452
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:472
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:486
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:419
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:481
|
||||
msgid "Enable"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:412
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:485
|
||||
msgid "Reduced tunnel count"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:416
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:436
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:489
|
||||
msgid "Idle minutes"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:420
|
||||
msgid "Close tunnels when idle"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:426
|
||||
msgid "New Keys on Reopen"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:434
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:435
|
||||
msgid "Disable"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:440
|
||||
msgid "Delay tunnel open until required"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:450
|
||||
msgid "Persistent private key"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:456
|
||||
msgid "File"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:460
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:220
|
||||
msgid "Local destination"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:464
|
||||
msgid "(if known)"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:470
|
||||
msgid "Local Authorization"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:476
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:490
|
||||
msgid "Username"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:480
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:494
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:484
|
||||
msgid "Outproxy Authorization"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:502
|
||||
msgid "Jump URL List"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:508
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:525
|
||||
msgid "Custom options"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:512
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:529
|
||||
msgid ""
|
||||
"NOTE: If tunnel is currently running, most changes will not take effect "
|
||||
"until tunnel is stopped and restarted."
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:514
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:531
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:518
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:535
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:520
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:537
|
||||
msgid "Save"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:73
|
||||
msgid "I2P Tunnel Manager - Edit Server Tunnel"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:93
|
||||
msgid "Edit server settings"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:101
|
||||
msgid "New server settings"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:199
|
||||
msgid "Website name"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:203
|
||||
msgid "(leave blank for outproxies)"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:208
|
||||
msgid "Private key file"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:230
|
||||
msgid "Add to local addressbook"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:237
|
||||
msgid "Hostname Signature"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:417
|
||||
msgid "Encrypt Leaseset"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:423
|
||||
msgid "Encryption Key"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:427
|
||||
msgid "Generate New Key"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:429
|
||||
msgid "Generate"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:431
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:523
|
||||
msgid "(Tunnel must be stopped first)"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:433
|
||||
msgid "Restricted Access List"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:439
|
||||
msgid "Whitelist"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:443
|
||||
msgid "Blacklist"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:447
|
||||
msgid "Access List"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:451
|
||||
msgid "Inbound connection limits (0=unlimited)"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:453
|
||||
msgid "Per client"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:455
|
||||
msgid "Per minute"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:459
|
||||
msgid "Per hour"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:463
|
||||
msgid "Per day"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:467
|
||||
msgid "Total"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:475
|
||||
msgid "Max concurrent connections (0=unlimited)"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:493
|
||||
msgid "New Certificate type"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:495
|
||||
msgid "None"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:499
|
||||
msgid "Hashcash (effort)"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:505
|
||||
msgid "Hashcash Calc Time"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:507
|
||||
msgid "Estimate"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:509
|
||||
msgid "Hidden"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:513
|
||||
msgid "Signed (signed by)"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:519
|
||||
msgid "Modify Certificate"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:521
|
||||
msgid "Modify"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:71
|
||||
msgid "I2P Tunnel Manager - List"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:83
|
||||
msgid "Status Messages"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:87
|
||||
msgid "Refresh"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:91
|
||||
msgid "Stop All"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:95
|
||||
msgid "Start All"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:99
|
||||
msgid "Restart All"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:103
|
||||
msgid "Reload Config"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:105
|
||||
msgid "I2P Server Tunnels"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:109
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:130
|
||||
msgid "Points at"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:111
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:153
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:157
|
||||
msgid "Preview"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:113
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:177
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:250
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:297
|
||||
msgid "Status"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:163
|
||||
msgid "Base32 Address"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:171
|
||||
msgid "No Preview"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:184
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:304
|
||||
msgid "Starting..."
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:191
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:205
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:311
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:325
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:339
|
||||
msgid "Stop"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:198
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:332
|
||||
msgid "Running"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:212
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:346
|
||||
msgid "Stopped"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:219
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:353
|
||||
msgid "Start"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:234
|
||||
msgid "New server tunnel"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:236
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:396
|
||||
msgid "Standard"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:238
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:398
|
||||
msgid "Create"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:240
|
||||
msgid "I2P Client Tunnels"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:248
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:283
|
||||
msgid "Interface"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:318
|
||||
msgid "Standby"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:363
|
||||
msgid "Outproxy"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:367
|
||||
msgid "Destination"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:381
|
||||
msgid "none"
|
||||
msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:394
|
||||
msgid "New client tunnel"
|
||||
msgstr ""
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: I2P i2ptunnel\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-01-20 19:26+0000\n"
|
||||
"POT-Creation-Date: 2011-02-13 17:44+0000\n"
|
||||
"PO-Revision-Date: 2010-06-15 14:09+0100\n"
|
||||
"Last-Translator: duck <duck@mail.i2p>\n"
|
||||
"Language-Team: duck <duck@mail.i2p>, monkeybrains <monkeybrains@mail.i2p>\n"
|
||||
@@ -40,7 +40,7 @@ msgstr ""
|
||||
msgid "internal"
|
||||
msgstr "intern"
|
||||
|
||||
#: ../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."
|
||||
@@ -48,78 +48,86 @@ msgstr ""
|
||||
"Ongeldige formulier verzonden, waarschijnlijk doordat je de 'back' of "
|
||||
"'reload' button van je browser hebt gebruikt. Verzend opnieuw."
|
||||
|
||||
#: ../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 "Configuratie van alle tunnels opnieuw geladen"
|
||||
|
||||
#. 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 "Opstarten van tunnel"
|
||||
|
||||
#. 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 "Stoppen van tunnel"
|
||||
|
||||
#: ../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 "Nieuwe Tunnel"
|
||||
|
||||
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:409
|
||||
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:418
|
||||
msgid "Standard client"
|
||||
msgstr "Standaard client"
|
||||
|
||||
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:410
|
||||
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:419
|
||||
msgid "HTTP client"
|
||||
msgstr "HTTP client"
|
||||
|
||||
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:411
|
||||
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:420
|
||||
msgid "IRC client"
|
||||
msgstr "IRC client"
|
||||
|
||||
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:412
|
||||
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:421
|
||||
msgid "Standard server"
|
||||
msgstr "Standaard server"
|
||||
|
||||
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:413
|
||||
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:422
|
||||
msgid "HTTP server"
|
||||
msgstr "HTTP server"
|
||||
|
||||
#: ../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 proxy"
|
||||
|
||||
#: ../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 proxy"
|
||||
|
||||
#: ../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 proxy"
|
||||
|
||||
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:417
|
||||
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:426
|
||||
msgid "IRC server"
|
||||
msgstr "IRC server"
|
||||
|
||||
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:418
|
||||
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:427
|
||||
msgid "Streamr client"
|
||||
msgstr "Streamr client"
|
||||
|
||||
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:419
|
||||
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:428
|
||||
msgid "Streamr server"
|
||||
msgstr "Streamr server"
|
||||
|
||||
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:420
|
||||
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:429
|
||||
msgid "HTTP bidir"
|
||||
msgstr "HTTP bidir"
|
||||
|
||||
#: ../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 "Host niet opgegeven"
|
||||
|
||||
#: ../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 "Poort niet opgegeven"
|
||||
@@ -604,8 +612,8 @@ msgid "Access List"
|
||||
msgstr "Toegangslijst"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:451
|
||||
msgid "Inbound connection limits (0 to disable)"
|
||||
msgstr "Inkomende connectie limieten (0 om uit te schakelen)"
|
||||
msgid "Inbound connection limits (0=unlimited)"
|
||||
msgstr "Inkomende connectie limieten (0=onbeperkt)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:453
|
||||
msgid "Per client"
|
||||
@@ -628,8 +636,8 @@ msgid "Total"
|
||||
msgstr "Totaal"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:475
|
||||
msgid "Max concurrent connections (0 to disable)"
|
||||
msgstr "Maximum gelijktijdige connecties (0 om uit te schakelen)"
|
||||
msgid "Max concurrent connections (0=unlimited)"
|
||||
msgstr "Maximum gelijktijdige connecties (0=onbeperkt)"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:493
|
||||
msgid "New Certificate type"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,17 +0,0 @@
|
||||
#
|
||||
# Update messages_xx.po and messages_xx.class files,
|
||||
# from both java and jsp sources.
|
||||
# Requires installed programs xgettext, msgfmt, msgmerge, and find.
|
||||
# zzz - public domain
|
||||
#
|
||||
|
||||
## launching sh.exe with -login parameter will open a shell with the current path always pointing to \bin\
|
||||
## need to cd into our orignal path - where we call sh.exe from.
|
||||
|
||||
cd $CALLFROM
|
||||
## echo $PWD
|
||||
|
||||
## except this everything is the same with bundle-message.sh
|
||||
## walking - public domain :-D
|
||||
|
||||
source bundle-messages.sh $PARAS
|
||||
@@ -80,15 +80,14 @@
|
||||
|
||||
<!-- Update the messages_*.po files.
|
||||
We need to supply the bat file for windows, and then change the fail property to true -->
|
||||
<exec executable="sh" osfamily="unix" failifexecutionfails="false" >
|
||||
<exec executable="sh" osfamily="unix" failifexecutionfails="true" >
|
||||
<arg value="./bundle-messages.sh" />
|
||||
</exec>
|
||||
<exec executable="sh" osfamily="mac" failifexecutionfails="false" >
|
||||
<exec executable="sh" osfamily="mac" failifexecutionfails="true" >
|
||||
<arg value="./bundle-messages.sh" />
|
||||
</exec>
|
||||
<exec executable="cmd" osfamily="windows" failifexecutionfails="false" >
|
||||
<arg value="/c" />
|
||||
<arg value="bundle-messages.bat" />
|
||||
<exec executable="sh" osfamily="windows" failifexecutionfails="true" >
|
||||
<arg value="./bundle-messages.sh" />
|
||||
</exec>
|
||||
<!-- jar again to get the latest messages_*.class files -->
|
||||
<jar destfile="./build/routerconsole.jar" basedir="./build/obj" includes="**/*.class" update="true" />
|
||||
@@ -106,9 +105,8 @@
|
||||
<arg value="./bundle-messages.sh" />
|
||||
<arg value="-p" />
|
||||
</exec>
|
||||
<exec executable="cmd" osfamily="windows" failifexecutionfails="true" >
|
||||
<arg value="/c" />
|
||||
<arg value="bundle-messages.bat" />
|
||||
<exec executable="sh" osfamily="windows" failifexecutionfails="true" >
|
||||
<arg value="./bundle-messages.sh" />
|
||||
<arg value="-p" />
|
||||
</exec>
|
||||
</target>
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
@echo off
|
||||
set Callfrom=%cd%
|
||||
set Paras=%1
|
||||
|
||||
rem before calling make sure you have msys and mingw 's "bin" path
|
||||
rem in your current searching path
|
||||
rem type "set path" to check
|
||||
if not exist ..\locale\*.only goto updateALL
|
||||
|
||||
rem put a messages_xx.only(eg messages_zh.only) into locale folder
|
||||
rem this script will only touch the po file(eg zh) you specified, leaving other po files untact.
|
||||
|
||||
for %%i in (..\locale\*.only) do set PO=%%~ni
|
||||
echo [Notice] Yu choose to Ony update the choosen file: %PO%.po
|
||||
for %%i in (..\locale\*.po) do if not %%~ni==%PO% ren %%i %%~ni.po-
|
||||
|
||||
call sh --login %cd%\bmsg.sh
|
||||
|
||||
for %%i in (..\locale\*.po-) do if not %%~ni==%PO% ren %%i %%~ni.po
|
||||
goto end
|
||||
|
||||
:updateALL
|
||||
call sh --login %cd%\bmsg.sh
|
||||
|
||||
:end
|
||||
echo End of Message Bundling
|
||||
@@ -18,6 +18,17 @@ then
|
||||
POUPDATE=1
|
||||
fi
|
||||
|
||||
# on windows, one must specify the path of commnad find
|
||||
# since windows has its own retarded version of find.
|
||||
if which find|grep -q -i windows ; then
|
||||
export PATH=.:/bin:/usr/local/bin:$PATH
|
||||
fi
|
||||
# Fast mode - update ondemond
|
||||
echo Placing a file named messages_{LangCode}.only in locale folder,
|
||||
echo will limit .po file update to the language specified by {LangCode}.
|
||||
LG2=$(find ../locale -iname messages_*.only|tail -1)
|
||||
[ LG2 ] && LG2=${LG2#../locale/messages_} && LG2=${LG2%.only}
|
||||
|
||||
#
|
||||
# generate strings/Countries.java from ../../../installer/resources/countries.txt
|
||||
#
|
||||
@@ -53,6 +64,11 @@ do
|
||||
# get language
|
||||
LG=${i#../locale/messages_}
|
||||
LG=${LG%.po}
|
||||
|
||||
# skip, if specified
|
||||
if [ $LG2 ]; then
|
||||
[ $LG != $LG2 ] && continue || echo INFO: Language update is set to [$LG2] only.
|
||||
fi
|
||||
|
||||
if [ "$POUPDATE" = "1" ]
|
||||
then
|
||||
@@ -106,15 +122,19 @@ do
|
||||
touch $i
|
||||
fi
|
||||
|
||||
echo "Generating ${CLASS}_$LG ResourceBundle..."
|
||||
if [ "$LG" != "en" ]
|
||||
then
|
||||
# only generate for non-source language
|
||||
echo "Generating ${CLASS}_$LG ResourceBundle..."
|
||||
|
||||
# convert to class files in build/obj
|
||||
msgfmt --java --statistics -r $CLASS -l $LG -d build/obj $i
|
||||
if [ $? -ne 0 ]
|
||||
then
|
||||
echo 'Warning - msgfmt failed, not updating translations'
|
||||
break
|
||||
fi
|
||||
# convert to class files in build/obj
|
||||
msgfmt --java --statistics -r $CLASS -l $LG -d build/obj $i
|
||||
if [ $? -ne 0 ]
|
||||
then
|
||||
echo 'Warning - msgfmt failed, not updating translations'
|
||||
break
|
||||
fi
|
||||
fi
|
||||
done
|
||||
rm -f $TMPFILE
|
||||
# todo: return failure
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package net.i2p.router.web;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.awt.GraphicsEnvironment;
|
||||
import java.io.File;
|
||||
import java.io.FilenameFilter;
|
||||
import java.io.IOException;
|
||||
@@ -54,10 +55,51 @@ 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");
|
||||
System.setProperty("java.awt.headless", "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");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -197,9 +197,10 @@ public class StatsGenerator {
|
||||
buf.append("; ");
|
||||
}
|
||||
|
||||
buf.append(ngettext((int) curRate.getLastEventCount(), "There was 1 event", "There were {0} events"));
|
||||
buf.append(' ');
|
||||
buf.append(_("in this period which ended {0} ago.", DataHelper.formatDuration2(now - curRate.getLastCoalesceDate())));
|
||||
// breaking the sentence like before makes translation in my language impossible.
|
||||
buf.append(_("There were {0} event(s) in this period", curRate.getLastEventCount()));
|
||||
// buf.append(' ');
|
||||
buf.append(_(" which ended {0} ago.", DataHelper.formatDuration2(now - curRate.getLastCoalesceDate())));
|
||||
} else {
|
||||
buf.append(" <i>").append(_("No events")).append("</i> ");
|
||||
}
|
||||
|
||||
5525
apps/routerconsole/locale/messages_en.po
Normal file
5525
apps/routerconsole/locale/messages_en.po
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -81,8 +81,8 @@ class MessageHandler implements I2PSessionListener {
|
||||
for (Iterator<I2PSocketManager.DisconnectListener> iter = _listeners.iterator(); iter.hasNext(); ) {
|
||||
I2PSocketManager.DisconnectListener lsnr = iter.next();
|
||||
lsnr.sessionDisconnected();
|
||||
iter.remove();
|
||||
}
|
||||
_listeners.clear();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
480
apps/susidns/locale/messages_en.po
Normal file
480
apps/susidns/locale/messages_en.po
Normal file
@@ -0,0 +1,480 @@
|
||||
# I2P
|
||||
# Copyright (C) 2009 The I2P Project
|
||||
# This file is distributed under the same license as the susidns package.
|
||||
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
||||
# foo <foo@bar>, 2009.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: I2P susidns\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-02-13 11:54+0000\n"
|
||||
"PO-Revision-Date: 2010-06-15 14:09+0100\n"
|
||||
"Last-Translator: duck <duck@mail.i2p>\n"
|
||||
"Language-Team: duck <duck@mail.i2p>\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/java/src/i2p/susi/dns/AddressbookBean.java:200
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:193
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:197
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:204
|
||||
msgid "Search within filtered list"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:206
|
||||
msgid "Filtered list"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:210
|
||||
msgid "no matches"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:213
|
||||
msgid "Addressbook"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:215
|
||||
msgid "contains no entries"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:217
|
||||
msgid "contains 1 entry"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:219
|
||||
#, java-format
|
||||
msgid "contains {0} entries"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:229
|
||||
#, java-format
|
||||
msgid "Showing {0} of {1}"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:260
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:368
|
||||
msgid "Add"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:260
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:265
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:366
|
||||
msgid "Replace"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:264
|
||||
#, java-format
|
||||
msgid "Host name {0} is already in addressbook, unchanged."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:266
|
||||
#, java-format
|
||||
msgid ""
|
||||
"Host name {0} is already in addressbook with a different destination. Click "
|
||||
"\"Replace\" to overwrite."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:278
|
||||
#, java-format
|
||||
msgid "Destination added for {0}."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:280
|
||||
#, java-format
|
||||
msgid "Destination changed for {0}."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:285
|
||||
msgid "Invalid Base 64 destination."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:289
|
||||
msgid "Please enter a host name and destination"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:293
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:314
|
||||
msgid "Delete Selected"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:303
|
||||
#, java-format
|
||||
msgid "Destination {0} deleted."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:305
|
||||
#, java-format
|
||||
msgid "{0} destinations deleted."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:311
|
||||
msgid "Addressbook saved."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:314
|
||||
msgid "ERROR: Could not write addressbook file."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:319
|
||||
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:148
|
||||
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:151
|
||||
msgid ""
|
||||
"Invalid form submission, probably because you used the \"back\" or \"reload"
|
||||
"\" button on your browser. Please resubmit."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:139
|
||||
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:130
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:130
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:130
|
||||
msgid "Save"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:141
|
||||
msgid "Configuration saved."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:142
|
||||
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:145
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:128
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:128
|
||||
msgid "Reload"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:144
|
||||
msgid "Configuration reloaded."
|
||||
msgstr ""
|
||||
|
||||
#. Yes this is a hack.
|
||||
#. No it doesn't work on a text-mode browser.
|
||||
#. Fetching from the addressbook servlet
|
||||
#. with the correct parameters will kick off a
|
||||
#. config reload and fetch.
|
||||
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:139
|
||||
msgid ""
|
||||
"Subscriptions saved, updating addressbook from subscription sources now."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:143
|
||||
msgid "Subscriptions saved."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:147
|
||||
msgid "Subscriptions reloaded."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:125
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:145
|
||||
msgid "addressbook"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:127
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:104
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:93
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:104
|
||||
msgid "addressbooks"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:129
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:106
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:95
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:106
|
||||
msgid "private"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:131
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:108
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:97
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:108
|
||||
msgid "master"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:133
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:110
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:99
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:110
|
||||
msgid "router"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:135
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:112
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:101
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:112
|
||||
msgid "published"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:137
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:114
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:103
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:102
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:114
|
||||
msgid "subscriptions"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:139
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:102
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:116
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:105
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:116
|
||||
msgid "configuration"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:141
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:118
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:107
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:118
|
||||
msgid "overview"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:163
|
||||
msgid "Filter"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:166
|
||||
msgid "all"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:177
|
||||
msgid "Current filter"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:182
|
||||
msgid "clear filter"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:224
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:226
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:362
|
||||
msgid "Destination"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:257
|
||||
msgid "Mark for deletion"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:279
|
||||
msgid "address helper link"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:312
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:345
|
||||
msgid "This addressbook is empty."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:356
|
||||
msgid "Add new destination"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:358
|
||||
msgid "Hostname"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:132
|
||||
msgid "Hints"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:134
|
||||
msgid ""
|
||||
"File and directory paths here are relative to the addressbook's working "
|
||||
"directory, which is normally ~/.i2p/addressbook/ (Linux) or %APPDATA%\\I2P"
|
||||
"\\addressbook\\ (Windows)."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:136
|
||||
msgid ""
|
||||
"If you want to manually add lines to an addressbook, add them to the private "
|
||||
"or master addressbooks."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:138
|
||||
msgid ""
|
||||
"The router addressbook and the published addressbook are updated by the "
|
||||
"addressbook application."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:140
|
||||
msgid ""
|
||||
"When you publish your addressbook, ALL destinations from the master and "
|
||||
"router addressbooks appear there."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:142
|
||||
msgid ""
|
||||
"Use the private addressbook for private destinations, these are not "
|
||||
"published."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:144
|
||||
msgid "Options"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:146
|
||||
msgid "File containing the list of subscriptions URLs (no need to change)"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:148
|
||||
msgid "Update interval in hours"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:150
|
||||
msgid ""
|
||||
"Your public hosts.txt file (choose a path within your webserver document "
|
||||
"root)"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:152
|
||||
msgid "Your hosts.txt (don't change)"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:154
|
||||
msgid "Your personal addressbook, these hosts will be published"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:156
|
||||
msgid "Your private addressbook, it is never published"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:158
|
||||
msgid "Port for your eepProxy (no need to change)"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:160
|
||||
msgid "Hostname for your eepProxy (no need to change)"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:162
|
||||
msgid "Whether to update the published addressbook"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:164
|
||||
msgid ""
|
||||
"File containing the etags header from the fetched subscription URLs (no need "
|
||||
"to change)"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:166
|
||||
msgid ""
|
||||
"File containing the modification timestamp for each fetched subscription URL "
|
||||
"(no need to change)"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:168
|
||||
msgid "File to log activity to (change to /dev/null if you like)"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:91
|
||||
msgid "Introduction"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:109
|
||||
msgid "What is the addressbook?"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:111
|
||||
msgid "The addressbook application is part of your i2p installation."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:113
|
||||
msgid ""
|
||||
"It regularly updates your hosts.txt file from distributed sources or "
|
||||
"\"subscriptions\"."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:115
|
||||
msgid ""
|
||||
"In the default configuration, the addressbook is only subscribed to www.i2p2."
|
||||
"i2p."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:117
|
||||
msgid ""
|
||||
"Subscribing to additional sites is easy, just add them to your <a href="
|
||||
"\"subscriptions.jsp\">subscriptions</a> file."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:119
|
||||
msgid ""
|
||||
"For more information on naming in i2p, see <a href=\"http://www.i2p2.i2p/"
|
||||
"naming.html\">the overview on www.i2p2.i2p</a>."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:121
|
||||
msgid "How does the addressbook work?"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:123
|
||||
msgid ""
|
||||
"The addressbook application regularly polls your subscriptions and merges "
|
||||
"their content into your \"router\" addressbook, stored in the hosts.txt file."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:125
|
||||
msgid ""
|
||||
"Then it merges your \"master\" addressbook (userhosts.txt) into the router "
|
||||
"addressbook as well."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:127
|
||||
msgid ""
|
||||
"If configured, the router addressbook is now written to the \"published\" "
|
||||
"addressbook, which will be publicly available if you are running an eepsite."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:129
|
||||
msgid ""
|
||||
"The router also uses a private addressbook (privatehosts.txt, not shown in "
|
||||
"the picture), which is not merged or published."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:131
|
||||
msgid ""
|
||||
"Hosts in the private addressbook can be accessed by you but their addresses "
|
||||
"are never distributed to others."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:133
|
||||
msgid ""
|
||||
"The private addressbook can also be used for aliases of hosts in your other "
|
||||
"addressbooks."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:132
|
||||
msgid "The subscription file contains a list of i2p URLs."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:134
|
||||
msgid ""
|
||||
"The addressbook application regularly checks this list for new eepsites."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:136
|
||||
msgid "Those URLs refer to published hosts.txt files."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:138
|
||||
msgid ""
|
||||
"The default subscription is the hosts.txt from www.i2p2.i2p, which is "
|
||||
"updated infrequently."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:140
|
||||
msgid ""
|
||||
"So it is a good idea to add additional subscriptions to sites that have the "
|
||||
"latest addresses."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:142
|
||||
msgid "See the FAQ for a list of subscription URLs."
|
||||
msgstr ""
|
||||
@@ -1,432 +1,505 @@
|
||||
# I2P
|
||||
# Copyright (C) 2009 The I2P Project
|
||||
# This file is distributed under the same license as the susidns package.
|
||||
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
||||
# foo <foo@bar>, 2009.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: I2P susidns\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-05-29 02:35+0000\n"
|
||||
"PO-Revision-Date: 2010-05-29 12:51+0800\n"
|
||||
"Last-Translator: walking <walking@mail.i2p>\n"
|
||||
"Language-Team: foo <foo@bar>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Poedit-Language: Chinese\n"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:199
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:193
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:197
|
||||
msgid "Search"
|
||||
msgstr "搜索"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:203
|
||||
msgid "Search within filtered list"
|
||||
msgstr "在过滤结果中搜索"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:205
|
||||
msgid "Filtered list"
|
||||
msgstr "过滤结果列表"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:209
|
||||
msgid "no matches"
|
||||
msgstr "无匹配项目"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:212
|
||||
msgid "Addressbook"
|
||||
msgstr "地址簿"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:214
|
||||
msgid "contains no entries"
|
||||
msgstr "包含 0 个项目"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:216
|
||||
msgid "contains 1 entry"
|
||||
msgstr "包含 1 个项目"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:218
|
||||
#, java-format
|
||||
msgid "contains {0} entries"
|
||||
msgstr "包含 {0} 个项目"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:228
|
||||
#, java-format
|
||||
msgid "Showing {0} of {1}"
|
||||
msgstr "显示 {0} 个项目共 {1}"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:259
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:368
|
||||
msgid "Add"
|
||||
msgstr "添加"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:259
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:264
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:366
|
||||
msgid "Replace"
|
||||
msgstr "替换"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:263
|
||||
#, java-format
|
||||
msgid "Host name {0} is already in addressbook, unchanged."
|
||||
msgstr "主机名称{0}已存在于地址簿中,本次操作未更新。"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:265
|
||||
#, java-format
|
||||
msgid "Host name {0} is already in addressbook with a different destination. Click \"Replace\" to overwrite."
|
||||
msgstr "域名{0}已以不同目标密钥的存在于地址簿中,点击“替换”进行覆盖"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:277
|
||||
#, java-format
|
||||
msgid "Destination added for {0}."
|
||||
msgstr "目标密钥已添加为{0}。"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:279
|
||||
#, java-format
|
||||
msgid "Destination changed for {0}."
|
||||
msgstr "目标已更新为{0}。"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:284
|
||||
msgid "Invalid Base 64 destination."
|
||||
msgstr "无效的Base64目标密钥"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:288
|
||||
msgid "Please enter a host name and destination"
|
||||
msgstr "请输入主机名称与目标"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:292
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:314
|
||||
msgid "Delete Selected"
|
||||
msgstr "删除选中项"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:302
|
||||
#, java-format
|
||||
msgid "Destination {0} deleted."
|
||||
msgstr "目标 {0} 已删除"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:304
|
||||
#, java-format
|
||||
msgid "{0} destinations deleted."
|
||||
msgstr "{0} 个目标已删除"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:310
|
||||
msgid "Addressbook saved."
|
||||
msgstr "地址簿已保存"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:313
|
||||
msgid "ERROR: Could not write addressbook file."
|
||||
msgstr "错误:无法写入地址簿文件"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:318
|
||||
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:148
|
||||
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:150
|
||||
msgid "Invalid form submission, probably because you used the \"back\" or \"reload\" button on your browser. Please resubmit."
|
||||
msgstr "提交数据无效,可能的原因是您使用了浏览器中的“前进”或“后退”按钮造成会话过期,请重新提交。"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:139
|
||||
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:129
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:130
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:130
|
||||
msgid "Save"
|
||||
msgstr "保存"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:141
|
||||
msgid "Configuration saved."
|
||||
msgstr "配置已保存"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:142
|
||||
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:144
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:128
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:128
|
||||
msgid "Reload"
|
||||
msgstr "刷新"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:144
|
||||
msgid "Configuration reloaded."
|
||||
msgstr "配置已重新载入"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:138
|
||||
msgid "Subscriptions saved, updating addressbook from subscription sources now."
|
||||
msgstr "订阅已保存,正在通过订阅地址更新地址簿。"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:142
|
||||
msgid "Subscriptions saved."
|
||||
msgstr "订阅已保存。"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:146
|
||||
msgid "Subscriptions reloaded."
|
||||
msgstr "订阅设置已重新载入。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:125
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:145
|
||||
msgid "addressbook"
|
||||
msgstr "地址簿"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:127
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:104
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:93
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:104
|
||||
msgid "addressbooks"
|
||||
msgstr "地址簿"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:129
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:106
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:95
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:106
|
||||
msgid "private"
|
||||
msgstr "私人"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:131
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:108
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:97
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:108
|
||||
msgid "master"
|
||||
msgstr "主要"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:133
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:110
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:99
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:110
|
||||
msgid "router"
|
||||
msgstr "路由"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:135
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:112
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:101
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:112
|
||||
msgid "published"
|
||||
msgstr "发布"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:137
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:114
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:103
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:102
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:114
|
||||
msgid "subscriptions"
|
||||
msgstr "订阅"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:139
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:102
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:116
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:105
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:116
|
||||
msgid "configuration"
|
||||
msgstr "配置"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:141
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:118
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:107
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:118
|
||||
msgid "overview"
|
||||
msgstr "介绍"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:163
|
||||
msgid "Filter"
|
||||
msgstr "过滤器"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:166
|
||||
msgid "all"
|
||||
msgstr "全部"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:177
|
||||
msgid "Current filter"
|
||||
msgstr "当前过滤器"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:182
|
||||
msgid "clear filter"
|
||||
msgstr "清除过滤器"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:224
|
||||
msgid "Name"
|
||||
msgstr "名称"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:226
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:362
|
||||
msgid "Destination"
|
||||
msgstr "目标"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:257
|
||||
msgid "Mark for deletion"
|
||||
msgstr "标记为删除"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:279
|
||||
msgid "address helper link"
|
||||
msgstr "地址簿助手链接"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:312
|
||||
msgid "Cancel"
|
||||
msgstr "取消"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:345
|
||||
msgid "This addressbook is empty."
|
||||
msgstr "此地址簿为空"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:356
|
||||
msgid "Add new destination"
|
||||
msgstr "添加新目标"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:358
|
||||
msgid "Hostname"
|
||||
msgstr "主机名称"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:132
|
||||
msgid "Hints"
|
||||
msgstr "提示"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:134
|
||||
msgid "File and directory paths here are relative to the addressbook's working directory, which is normally ~/.i2p/addressbook/ (Linux) or %APPDATA%\\I2P\\addressbook\\ (Windows)."
|
||||
msgstr "此处使用的路径是以地址簿工作目录为参照的相对路径,通常为 ~/.i2p/addressbook/ (Linux) 或 %APPDATA%\\I2P\\addressbook\\ (Windows)."
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:136
|
||||
msgid "If you want to manually add lines to an addressbook, add them to the private or master addressbooks."
|
||||
msgstr "如果您希望想地址簿手动添加地址条目,请将其加入私有地址簿或主地址簿。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:138
|
||||
msgid "The router addressbook and the published addressbook are updated by the addressbook application."
|
||||
msgstr "路由地址簿与已发布地址簿会由地址簿程序负责更新。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:140
|
||||
msgid "When you publish your addressbook, ALL destinations from the master and router addressbooks appear there."
|
||||
msgstr "当您发布地址簿时,主地址簿与路由地址簿中的所有地址条目都会显示于已发布地址簿中。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:142
|
||||
msgid "Use the private addressbook for private destinations, these are not published."
|
||||
msgstr "私有地址簿用来记录需要保密的私人目标,其中的条目不会被发布。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:144
|
||||
msgid "Options"
|
||||
msgstr "选项"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:146
|
||||
msgid "File containing the list of subscriptions URLs (no need to change)"
|
||||
msgstr "含有订阅URL列表的文件(无需修改)"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:148
|
||||
msgid "Update interval in hours"
|
||||
msgstr "更新周期(小时)"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:150
|
||||
msgid "Your public hosts.txt file (choose a path within your webserver document root)"
|
||||
msgstr "您发布的公开地址簿 hosts.txt (请指定为您Web服务器目录中的某个路径以便发布。)"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:152
|
||||
msgid "Your hosts.txt (don't change)"
|
||||
msgstr "您的 host.txt (无需修改)"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:154
|
||||
msgid "Your personal addressbook, these hosts will be published"
|
||||
msgstr "您的个人地址簿,其中的地址会参与发布。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:156
|
||||
msgid "Your private addressbook, it is never published"
|
||||
msgstr "您的私有地址簿,其中的地址不会被发布。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:158
|
||||
msgid "Port for your eepProxy (no need to change)"
|
||||
msgstr "您的I2P代理端口(无需修改)"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:160
|
||||
msgid "Hostname for your eepProxy (no need to change)"
|
||||
msgstr "您的I2P代理主机名(无需修改)"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:162
|
||||
msgid "Whether to update the published addressbook"
|
||||
msgstr "是否更新发布地址簿"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:164
|
||||
msgid "File containing the etags header from the fetched subscription URLs (no need to change)"
|
||||
msgstr "此文件含有订阅URL返回的etag头(无需修改)"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:166
|
||||
msgid "File containing the modification timestamp for each fetched subscription URL (no need to change)"
|
||||
msgstr "此文件含有每个地址簿订阅URL上次获取时的修改时间(无需修改)"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:168
|
||||
msgid "File to log activity to (change to /dev/null if you like)"
|
||||
msgstr "活动日志文件(关闭可设为/dev/null [Linux])"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:91
|
||||
msgid "Introduction"
|
||||
msgstr "介绍"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:109
|
||||
msgid "What is the addressbook?"
|
||||
msgstr "什么是地址簿"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:111
|
||||
msgid "The addressbook application is part of your i2p installation."
|
||||
msgstr "地址簿程序是I2P安装程序的一部分。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:113
|
||||
msgid "It regularly updates your hosts.txt file from distributed sources or \"subscriptions\"."
|
||||
msgstr "他通过分散的来源或称地址簿“订阅”(概念类似RSS)更新您的地址簿文件 host.txt。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:115
|
||||
msgid "In the default configuration, the addressbook is only subscribed to www.i2p2.i2p."
|
||||
msgstr "默认设置中地址簿仅订阅 www.i2p2.i2p 的项目。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:117
|
||||
msgid "Subscribing to additional sites is easy, just add them to your <a href=\"subscriptions.jsp\">subscriptions</a> file."
|
||||
msgstr "订阅其他网站的地址簿也很简单,只需将它们加入 <a href=\"subscriptions.jsp\">订阅</a> 文件即可。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:119
|
||||
msgid "For more information on naming in i2p, see <a href=\"http://www.i2p2.i2p/naming.html\">the overview on www.i2p2.i2p</a>."
|
||||
msgstr "关于I2P网络域名系统的更多信息,参见 <a href=\"http://www.i2p2.i2p/naming.html\"> www.i2p2.i2p 网站上的“概述” </a>."
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:121
|
||||
msgid "How does the addressbook work?"
|
||||
msgstr "那么地址簿是如何工作的呢?"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:123
|
||||
msgid "The addressbook application regularly polls your subscriptions and merges their content into your \"router\" addressbook, stored in the hosts.txt file."
|
||||
msgstr "地址簿程序定期通过订阅的URL获取新的地址簿条目并将它们合并入您的“路由”地址簿中,保存与 hosts.txt 文件内。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:125
|
||||
msgid "Then it merges your \"master\" addressbook (userhosts.txt) into the router addressbook as well."
|
||||
msgstr "随后他还会将您的“主要”地址簿(userhost.txt)合并入路由器地址簿。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:127
|
||||
msgid "If configured, the router addressbook is now written to the \"published\" addressbook, which will be publicly available if you are running an eepsite."
|
||||
msgstr "如果启用了相关配置,路由器地址簿会写入您的“发布”地址簿中,如果您有自己的eepsite匿名站点,那么它可以通过您的站点公开发布。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:129
|
||||
msgid "The router also uses a private addressbook (privatehosts.txt, not shown in the picture), which is not merged or published."
|
||||
msgstr "路由器同时提供了私有地址簿(privatehost.txt,图片中为出现),其中的项目不会被合并或发布。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:131
|
||||
msgid "Hosts in the private addressbook can be accessed by you but their addresses are never distributed to others."
|
||||
msgstr "您可以访问私有地址簿中的网站,但它们的地址绝不会通过您的公开地址簿发布给别人。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:133
|
||||
msgid "The private addressbook can also be used for aliases of hosts in your other addressbooks."
|
||||
msgstr "私有地址簿还可以被用来设置网站别名。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:132
|
||||
msgid "The subscription file contains a list of i2p URLs."
|
||||
msgstr "订阅文件是一个I2P链接列表。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:134
|
||||
msgid "The addressbook application regularly checks this list for new eepsites."
|
||||
msgstr "地址簿程序定期通过这些链接检查是否有新的I2P匿名网站。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:136
|
||||
msgid "Those URLs refer to published hosts.txt files."
|
||||
msgstr "这些URL指向公开发布的hosts.txt文件。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:138
|
||||
msgid "The default subscription is the hosts.txt from www.i2p2.i2p, which is updated infrequently."
|
||||
msgstr "默认订阅是 www.i2p2.i2p 提供的 hosts.txt,此文件很少更新。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:140
|
||||
msgid "So it is a good idea to add additional subscriptions to sites that have the latest addresses."
|
||||
msgstr "所以订阅一些网站的最新地址簿是个不错的主意。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:142
|
||||
msgid "See the FAQ for a list of subscription URLs."
|
||||
msgstr "其他来源的订阅链接参见I2P站点的 <a href=\"http://www.i2p2.i2p/faq_zh.html\">FAQ</a>"
|
||||
|
||||
#~ msgid "Delete"
|
||||
#~ msgstr "删除"
|
||||
|
||||
# I2P
|
||||
# Copyright (C) 2009 The I2P Project
|
||||
# This file is distributed under the same license as the susidns package.
|
||||
# To contribute translations, see http://www.i2p2.de/newdevelopers
|
||||
# foo <foo@bar>, 2009.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: I2P susidns\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-02-09 15:10+0000\n"
|
||||
"PO-Revision-Date: 2010-05-29 12:51+0800\n"
|
||||
"Last-Translator: walking <walking@mail.i2p>\n"
|
||||
"Language-Team: foo <foo@bar>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Poedit-Language: Chinese\n"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:200
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:193
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:197
|
||||
msgid "Search"
|
||||
msgstr "搜索"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:204
|
||||
msgid "Search within filtered list"
|
||||
msgstr "在过滤结果中搜索"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:206
|
||||
msgid "Filtered list"
|
||||
msgstr "过滤结果列表"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:210
|
||||
msgid "no matches"
|
||||
msgstr "无匹配项目"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:213
|
||||
msgid "Addressbook"
|
||||
msgstr "地址簿"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:215
|
||||
msgid "contains no entries"
|
||||
msgstr "包含 0 个项目"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:217
|
||||
msgid "contains 1 entry"
|
||||
msgstr "包含 1 个项目"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:219
|
||||
#, java-format
|
||||
msgid "contains {0} entries"
|
||||
msgstr "包含 {0} 个项目"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:229
|
||||
#, java-format
|
||||
msgid "Showing {0} of {1}"
|
||||
msgstr "显示 {0} 个项目共 {1}"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:260
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:368
|
||||
msgid "Add"
|
||||
msgstr "添加"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:260
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:265
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:366
|
||||
msgid "Replace"
|
||||
msgstr "替换"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:264
|
||||
#, java-format
|
||||
msgid "Host name {0} is already in addressbook, unchanged."
|
||||
msgstr "主机名称{0}已存在于地址簿中,本次操作未更新。"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:266
|
||||
#, java-format
|
||||
msgid ""
|
||||
"Host name {0} is already in addressbook with a different destination. Click "
|
||||
"\"Replace\" to overwrite."
|
||||
msgstr "域名{0}已以不同目标密钥的存在于地址簿中,点击“替换”进行覆盖"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:278
|
||||
#, java-format
|
||||
msgid "Destination added for {0}."
|
||||
msgstr "目标密钥已添加为{0}。"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:280
|
||||
#, java-format
|
||||
msgid "Destination changed for {0}."
|
||||
msgstr "目标已更新为{0}。"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:285
|
||||
msgid "Invalid Base 64 destination."
|
||||
msgstr "无效的Base64目标密钥"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:289
|
||||
msgid "Please enter a host name and destination"
|
||||
msgstr "请输入主机名称与目标"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:293
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:314
|
||||
msgid "Delete Selected"
|
||||
msgstr "删除选中项"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:303
|
||||
#, java-format
|
||||
msgid "Destination {0} deleted."
|
||||
msgstr "目标 {0} 已删除"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:305
|
||||
#, java-format
|
||||
msgid "{0} destinations deleted."
|
||||
msgstr "{0} 个目标已删除"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:311
|
||||
msgid "Addressbook saved."
|
||||
msgstr "地址簿已保存"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:314
|
||||
msgid "ERROR: Could not write addressbook file."
|
||||
msgstr "错误:无法写入地址簿文件"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:319
|
||||
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:148
|
||||
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:151
|
||||
msgid ""
|
||||
"Invalid form submission, probably because you used the \"back\" or \"reload"
|
||||
"\" button on your browser. Please resubmit."
|
||||
msgstr ""
|
||||
"提交数据无效,可能的原因是您使用了浏览器中的“前进”或“后退”按钮造成会话过期,"
|
||||
"请重新提交。"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:139
|
||||
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:130
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:130
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:130
|
||||
msgid "Save"
|
||||
msgstr "保存"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:141
|
||||
msgid "Configuration saved."
|
||||
msgstr "配置已保存"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:142
|
||||
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:145
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:128
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:128
|
||||
msgid "Reload"
|
||||
msgstr "刷新"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:144
|
||||
msgid "Configuration reloaded."
|
||||
msgstr "配置已重新载入"
|
||||
|
||||
#. Yes this is a hack.
|
||||
#. No it doesn't work on a text-mode browser.
|
||||
#. Fetching from the addressbook servlet
|
||||
#. with the correct parameters will kick off a
|
||||
#. config reload and fetch.
|
||||
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:139
|
||||
msgid ""
|
||||
"Subscriptions saved, updating addressbook from subscription sources now."
|
||||
msgstr "订阅已保存,正在通过订阅地址更新地址簿。"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:143
|
||||
msgid "Subscriptions saved."
|
||||
msgstr "订阅已保存。"
|
||||
|
||||
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:147
|
||||
msgid "Subscriptions reloaded."
|
||||
msgstr "订阅设置已重新载入。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:125
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:145
|
||||
msgid "addressbook"
|
||||
msgstr "地址簿"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:127
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:104
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:93
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:104
|
||||
msgid "addressbooks"
|
||||
msgstr "地址簿"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:129
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:106
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:95
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:106
|
||||
msgid "private"
|
||||
msgstr "私人"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:131
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:108
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:97
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:108
|
||||
msgid "master"
|
||||
msgstr "主要"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:133
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:110
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:99
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:110
|
||||
msgid "router"
|
||||
msgstr "路由"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:135
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:112
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:101
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:112
|
||||
msgid "published"
|
||||
msgstr "发布"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:137
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:114
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:103
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:102
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:114
|
||||
msgid "subscriptions"
|
||||
msgstr "订阅"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:139
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:102
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:116
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:105
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:116
|
||||
msgid "configuration"
|
||||
msgstr "配置"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:141
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:118
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:107
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:118
|
||||
msgid "overview"
|
||||
msgstr "介绍"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:163
|
||||
msgid "Filter"
|
||||
msgstr "过滤器"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:166
|
||||
msgid "all"
|
||||
msgstr "全部"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:177
|
||||
msgid "Current filter"
|
||||
msgstr "当前过滤器"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:182
|
||||
msgid "clear filter"
|
||||
msgstr "清除过滤器"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:224
|
||||
msgid "Name"
|
||||
msgstr "名称"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:226
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:362
|
||||
msgid "Destination"
|
||||
msgstr "目标"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:257
|
||||
msgid "Mark for deletion"
|
||||
msgstr "标记为删除"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:279
|
||||
msgid "address helper link"
|
||||
msgstr "地址簿助手链接"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:312
|
||||
msgid "Cancel"
|
||||
msgstr "取消"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:345
|
||||
msgid "This addressbook is empty."
|
||||
msgstr "此地址簿为空"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:356
|
||||
msgid "Add new destination"
|
||||
msgstr "添加新目标"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:358
|
||||
msgid "Hostname"
|
||||
msgstr "主机名称"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:132
|
||||
msgid "Hints"
|
||||
msgstr "提示"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:134
|
||||
msgid ""
|
||||
"File and directory paths here are relative to the addressbook's working "
|
||||
"directory, which is normally ~/.i2p/addressbook/ (Linux) or %APPDATA%\\I2P"
|
||||
"\\addressbook\\ (Windows)."
|
||||
msgstr ""
|
||||
"此处使用的路径是以地址簿工作目录为参照的相对路径,通常为 ~/.i2p/addressbook/ "
|
||||
"(Linux) 或 %APPDATA%\\I2P\\addressbook\\ (Windows)."
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:136
|
||||
msgid ""
|
||||
"If you want to manually add lines to an addressbook, add them to the private "
|
||||
"or master addressbooks."
|
||||
msgstr "如果您希望想地址簿手动添加地址条目,请将其加入私有地址簿或主地址簿。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:138
|
||||
msgid ""
|
||||
"The router addressbook and the published addressbook are updated by the "
|
||||
"addressbook application."
|
||||
msgstr "路由地址簿与已发布地址簿会由地址簿程序负责更新。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:140
|
||||
msgid ""
|
||||
"When you publish your addressbook, ALL destinations from the master and "
|
||||
"router addressbooks appear there."
|
||||
msgstr ""
|
||||
"当您发布地址簿时,主地址簿与路由地址簿中的所有地址条目都会显示于已发布地址簿"
|
||||
"中。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:142
|
||||
msgid ""
|
||||
"Use the private addressbook for private destinations, these are not "
|
||||
"published."
|
||||
msgstr "私有地址簿用来记录需要保密的私人目标,其中的条目不会被发布。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:144
|
||||
msgid "Options"
|
||||
msgstr "选项"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:146
|
||||
msgid "File containing the list of subscriptions URLs (no need to change)"
|
||||
msgstr "含有订阅URL列表的文件(无需修改)"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:148
|
||||
msgid "Update interval in hours"
|
||||
msgstr "更新周期(小时)"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:150
|
||||
msgid ""
|
||||
"Your public hosts.txt file (choose a path within your webserver document "
|
||||
"root)"
|
||||
msgstr ""
|
||||
"您发布的公开地址簿 hosts.txt (请指定为您Web服务器目录中的某个路径以便发布。)"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:152
|
||||
msgid "Your hosts.txt (don't change)"
|
||||
msgstr "您的 host.txt (无需修改)"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:154
|
||||
msgid "Your personal addressbook, these hosts will be published"
|
||||
msgstr "您的个人地址簿,其中的地址会参与发布。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:156
|
||||
msgid "Your private addressbook, it is never published"
|
||||
msgstr "您的私有地址簿,其中的地址不会被发布。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:158
|
||||
msgid "Port for your eepProxy (no need to change)"
|
||||
msgstr "您的I2P代理端口(无需修改)"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:160
|
||||
msgid "Hostname for your eepProxy (no need to change)"
|
||||
msgstr "您的I2P代理主机名(无需修改)"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:162
|
||||
msgid "Whether to update the published addressbook"
|
||||
msgstr "是否更新发布地址簿"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:164
|
||||
msgid ""
|
||||
"File containing the etags header from the fetched subscription URLs (no need "
|
||||
"to change)"
|
||||
msgstr "此文件含有订阅URL返回的etag头(无需修改)"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:166
|
||||
msgid ""
|
||||
"File containing the modification timestamp for each fetched subscription URL "
|
||||
"(no need to change)"
|
||||
msgstr "此文件含有每个地址簿订阅URL上次获取时的修改时间(无需修改)"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:168
|
||||
msgid "File to log activity to (change to /dev/null if you like)"
|
||||
msgstr "活动日志文件(关闭可设为/dev/null [Linux])"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:91
|
||||
msgid "Introduction"
|
||||
msgstr "介绍"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:109
|
||||
msgid "What is the addressbook?"
|
||||
msgstr "什么是地址簿"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:111
|
||||
msgid "The addressbook application is part of your i2p installation."
|
||||
msgstr "地址簿程序是I2P安装程序的一部分。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:113
|
||||
msgid ""
|
||||
"It regularly updates your hosts.txt file from distributed sources or "
|
||||
"\"subscriptions\"."
|
||||
msgstr ""
|
||||
"他通过分散的来源或称地址簿“订阅”(概念类似RSS)更新您的地址簿文件 host.txt。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:115
|
||||
msgid ""
|
||||
"In the default configuration, the addressbook is only subscribed to www.i2p2."
|
||||
"i2p."
|
||||
msgstr "默认设置中地址簿仅订阅 www.i2p2.i2p 的项目。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:117
|
||||
msgid ""
|
||||
"Subscribing to additional sites is easy, just add them to your <a href="
|
||||
"\"subscriptions.jsp\">subscriptions</a> file."
|
||||
msgstr ""
|
||||
"订阅其他网站的地址簿也很简单,只需将它们加入 <a href=\"subscriptions.jsp\">订"
|
||||
"阅</a> 文件即可。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:119
|
||||
msgid ""
|
||||
"For more information on naming in i2p, see <a href=\"http://www.i2p2.i2p/"
|
||||
"naming.html\">the overview on www.i2p2.i2p</a>."
|
||||
msgstr ""
|
||||
"关于I2P网络域名系统的更多信息,参见 <a href=\"http://www.i2p2.i2p/naming.html"
|
||||
"\"> www.i2p2.i2p 网站上的“概述” </a>."
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:121
|
||||
msgid "How does the addressbook work?"
|
||||
msgstr "那么地址簿是如何工作的呢?"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:123
|
||||
msgid ""
|
||||
"The addressbook application regularly polls your subscriptions and merges "
|
||||
"their content into your \"router\" addressbook, stored in the hosts.txt file."
|
||||
msgstr ""
|
||||
"地址簿程序定期通过订阅的URL获取新的地址簿条目并将它们合并入您的“路由”地址簿"
|
||||
"中,保存与 hosts.txt 文件内。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:125
|
||||
msgid ""
|
||||
"Then it merges your \"master\" addressbook (userhosts.txt) into the router "
|
||||
"addressbook as well."
|
||||
msgstr "随后他还会将您的“主要”地址簿(userhost.txt)合并入路由器地址簿。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:127
|
||||
msgid ""
|
||||
"If configured, the router addressbook is now written to the \"published\" "
|
||||
"addressbook, which will be publicly available if you are running an eepsite."
|
||||
msgstr ""
|
||||
"如果启用了相关配置,路由器地址簿会写入您的“发布”地址簿中,如果您有自己的"
|
||||
"eepsite匿名站点,那么它可以通过您的站点公开发布。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:129
|
||||
msgid ""
|
||||
"The router also uses a private addressbook (privatehosts.txt, not shown in "
|
||||
"the picture), which is not merged or published."
|
||||
msgstr ""
|
||||
"路由器同时提供了私有地址簿(privatehost.txt,图片中为出现),其中的项目不会被合并"
|
||||
"或发布。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:131
|
||||
msgid ""
|
||||
"Hosts in the private addressbook can be accessed by you but their addresses "
|
||||
"are never distributed to others."
|
||||
msgstr ""
|
||||
"您可以访问私有地址簿中的网站,但它们的地址绝不会通过您的公开地址簿发布给别"
|
||||
"人。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:133
|
||||
msgid ""
|
||||
"The private addressbook can also be used for aliases of hosts in your other "
|
||||
"addressbooks."
|
||||
msgstr "私有地址簿还可以被用来设置网站别名。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:132
|
||||
msgid "The subscription file contains a list of i2p URLs."
|
||||
msgstr "订阅文件是一个I2P链接列表。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:134
|
||||
msgid ""
|
||||
"The addressbook application regularly checks this list for new eepsites."
|
||||
msgstr "地址簿程序定期通过这些链接检查是否有新的I2P匿名网站。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:136
|
||||
msgid "Those URLs refer to published hosts.txt files."
|
||||
msgstr "这些URL指向公开发布的hosts.txt文件。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:138
|
||||
msgid ""
|
||||
"The default subscription is the hosts.txt from www.i2p2.i2p, which is "
|
||||
"updated infrequently."
|
||||
msgstr "默认订阅是 www.i2p2.i2p 提供的 hosts.txt,此文件很少更新。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:140
|
||||
msgid ""
|
||||
"So it is a good idea to add additional subscriptions to sites that have the "
|
||||
"latest addresses."
|
||||
msgstr "所以订阅一些网站的最新地址簿是个不错的主意。"
|
||||
|
||||
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:142
|
||||
msgid "See the FAQ for a list of subscription URLs."
|
||||
msgstr ""
|
||||
"其他来源的订阅链接参见I2P站点的 <a href=\"http://www.i2p2.i2p/faq_zh.html"
|
||||
"\">FAQ</a>"
|
||||
|
||||
#~ msgid "Delete"
|
||||
#~ msgstr "删除"
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
#
|
||||
# Update messages_xx.po and messages_xx.class files,
|
||||
# from both java and jsp sources.
|
||||
# Requires installed programs xgettext, msgfmt, msgmerge, and find.
|
||||
# zzz - public domain
|
||||
#
|
||||
|
||||
## launching sh.exe with -login parameter will open a shell with the current path always pointing to \bin\
|
||||
## need to cd into our orignal path - where we call sh.exe from.
|
||||
|
||||
cd $CALLFROM
|
||||
## echo $PWD
|
||||
|
||||
## except this everything is the same with bundle-message.sh
|
||||
## walking - public domain :-D
|
||||
|
||||
source bundle-messages.sh $PARAS
|
||||
@@ -80,15 +80,14 @@
|
||||
<target name="bundle" depends="compile, precompilejsp">
|
||||
<!-- Update the messages_*.po files.
|
||||
We need to supply the bat file for windows, and then change the fail property to true -->
|
||||
<exec executable="sh" osfamily="unix" failifexecutionfails="false" >
|
||||
<exec executable="sh" osfamily="unix" failifexecutionfails="true" >
|
||||
<arg value="./bundle-messages.sh" />
|
||||
</exec>
|
||||
<exec executable="sh" osfamily="mac" failifexecutionfails="false" >
|
||||
<exec executable="sh" osfamily="mac" failifexecutionfails="true" >
|
||||
<arg value="./bundle-messages.sh" />
|
||||
</exec>
|
||||
<exec executable="cmd" osfamily="windows" failifexecutionfails="false" >
|
||||
<arg value="/c" />
|
||||
<arg value="bundle-messages.bat" />
|
||||
<exec executable="sh" osfamily="windows" failifexecutionfails="true" >
|
||||
<arg value="./bundle-messages.sh" />
|
||||
</exec>
|
||||
</target>
|
||||
|
||||
@@ -102,9 +101,8 @@
|
||||
<arg value="./bundle-messages.sh" />
|
||||
<arg value="-p" />
|
||||
</exec>
|
||||
<exec executable="cmd" osfamily="windows" failifexecutionfails="true" >
|
||||
<arg value="/c" />
|
||||
<arg value="bundle-messages.bat" />
|
||||
<exec executable="sh" osfamily="windows" failifexecutionfails="true" >
|
||||
<arg value="./bundle-messages.sh" />
|
||||
<arg value="-p" />
|
||||
</exec>
|
||||
</target>
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
@echo off
|
||||
set Callfrom=%cd%
|
||||
set Paras=%1
|
||||
|
||||
rem before calling make sure you have msys and mingw 's "bin" path
|
||||
rem in your current searching path
|
||||
rem type "set path" to check
|
||||
if not exist ..\locale\*.only goto updateALL
|
||||
|
||||
rem put a messages_xx.only(eg messages_zh.only) into locale folder
|
||||
rem this script will only touch the po file(eg zh) you specified, leaving other po files untact.
|
||||
|
||||
for %%i in (..\locale\*.only) do set PO=%%~ni
|
||||
echo [Notice] Yu choose to Ony update the choosen file: %PO%.po
|
||||
for %%i in (..\locale\*.po) do if not %%~ni==%PO% ren %%i %%~ni.po-
|
||||
|
||||
call sh --login %cd%\bmsg.sh
|
||||
|
||||
for %%i in (..\locale\*.po-) do if not %%~ni==%PO% ren %%i %%~ni.po
|
||||
goto end
|
||||
|
||||
:updateALL
|
||||
call sh --login %cd%\bmsg.sh
|
||||
|
||||
:end
|
||||
echo End of Message Bundling
|
||||
@@ -18,6 +18,17 @@ then
|
||||
POUPDATE=1
|
||||
fi
|
||||
|
||||
# on windows, one must specify the path of commnad find
|
||||
# since windows has its own retarded version of find.
|
||||
if which find|grep -q -i windows ; then
|
||||
export PATH=.:/bin:/usr/local/bin:$PATH
|
||||
fi
|
||||
# Fast mode - update ondemond
|
||||
echo Placing a file named messages_{LangCode}.only in locale folder,
|
||||
echo will limit .po file update to the language specified by {LangCode}.
|
||||
LG2=$(find ../locale -iname messages_*.only|tail -1)
|
||||
[ LG2 ] && LG2=${LG2#../locale/messages_} && LG2=${LG2%.only}
|
||||
|
||||
# add ../src/ so the refs will work in the po file
|
||||
JPATHS="../src/java/ ../src/tmp/"
|
||||
for i in ../locale/messages_*.po
|
||||
@@ -26,6 +37,11 @@ do
|
||||
LG=${i#../locale/messages_}
|
||||
LG=${LG%.po}
|
||||
|
||||
# skip, if specified
|
||||
if [ $LG2 ]; then
|
||||
[ $LG != $LG2 ] && continue || echo INFO: Language update is set to [$LG2] only.
|
||||
fi
|
||||
|
||||
if [ "$POUPDATE" = "1" ]
|
||||
then
|
||||
# make list of java files newer than the .po file
|
||||
@@ -72,15 +88,19 @@ do
|
||||
touch $i
|
||||
fi
|
||||
|
||||
echo "Generating ${CLASS}_$LG ResourceBundle..."
|
||||
if [ "$LG" != "en" ]
|
||||
then
|
||||
# only generate for non-source language
|
||||
echo "Generating ${CLASS}_$LG ResourceBundle..."
|
||||
|
||||
# convert to class files in build/obj
|
||||
msgfmt --java --statistics -r $CLASS -l $LG -d WEB-INF/classes $i
|
||||
if [ $? -ne 0 ]
|
||||
then
|
||||
echo 'Warning - msgfmt failed, not updating translations'
|
||||
break
|
||||
fi
|
||||
# convert to class files in build/obj
|
||||
msgfmt --java --statistics -r $CLASS -l $LG -d WEB-INF/classes $i
|
||||
if [ $? -ne 0 ]
|
||||
then
|
||||
echo 'Warning - msgfmt failed, not updating translations'
|
||||
break
|
||||
fi
|
||||
fi
|
||||
done
|
||||
rm -f $TMPFILE
|
||||
# todo: return failure
|
||||
|
||||
@@ -97,6 +97,7 @@
|
||||
</target>
|
||||
|
||||
<target name="buildDesktopGui" depends="buildCore, buildrouter" >
|
||||
<ant dir="apps/desktopgui" target="clean" />
|
||||
<ant dir="apps/desktopgui" target="jar" />
|
||||
</target>
|
||||
|
||||
@@ -200,7 +201,7 @@
|
||||
<copy file="apps/addressbook/dist/addressbook.war" todir="build/" />
|
||||
</target>
|
||||
<!-- the apps need to compile the jsps to poupdate -->
|
||||
<target name="poupdate" depends="buildRouter, buildStreaming, buildSystray, buildJetty" >
|
||||
<target name="poupdate" depends="buildRouter, buildStreaming, buildSystray, buildJetty, buildDesktopGui" >
|
||||
<ant dir="apps/routerconsole/java/" target="poupdate" />
|
||||
<ant dir="apps/i2psnark/java/" target="poupdate" />
|
||||
<ant dir="apps/i2ptunnel/java/" target="poupdate" />
|
||||
|
||||
@@ -40,10 +40,12 @@ public class QueuedI2CPMessageReader extends I2CPMessageReader {
|
||||
I2CPMessage msg = null;
|
||||
try {
|
||||
msg = in.take();
|
||||
if (msg.getType() == PoisonI2CPMessage.MESSAGE_TYPE)
|
||||
if (msg.getType() == PoisonI2CPMessage.MESSAGE_TYPE) {
|
||||
_listener.disconnected(QueuedI2CPMessageReader.this);
|
||||
cancelRunner();
|
||||
else
|
||||
} else {
|
||||
_listener.messageReceived(QueuedI2CPMessageReader.this, msg);
|
||||
}
|
||||
} catch (InterruptedException ie) {}
|
||||
}
|
||||
// ??? unused
|
||||
|
||||
@@ -102,7 +102,8 @@ public class SessionEncryptionTest extends TestCase{
|
||||
|
||||
|
||||
|
||||
_context.sessionKeyManager().tagsDelivered(pubKey, curKey, firstTags);
|
||||
TagSetHandle tsh = _context.sessionKeyManager().tagsDelivered(pubKey, curKey, firstTags);
|
||||
_context.sessionKeyManager().tagsAcked(pubKey, curKey, tsh);
|
||||
|
||||
curKey = _context.sessionKeyManager().getCurrentKey(pubKey);
|
||||
SessionTag curTag = _context.sessionKeyManager().consumeNextAvailableTag(pubKey, curKey);
|
||||
@@ -130,7 +131,8 @@ public class SessionEncryptionTest extends TestCase{
|
||||
|
||||
|
||||
|
||||
_context.sessionKeyManager().tagsDelivered(pubKey, curKey, secondTags);
|
||||
tsh = _context.sessionKeyManager().tagsDelivered(pubKey, curKey, secondTags);
|
||||
_context.sessionKeyManager().tagsAcked(pubKey, curKey, tsh);
|
||||
|
||||
curKey = _context.sessionKeyManager().getCurrentKey(pubKey);
|
||||
curTag = _context.sessionKeyManager().consumeNextAvailableTag(pubKey, curKey);
|
||||
@@ -199,7 +201,8 @@ public class SessionEncryptionTest extends TestCase{
|
||||
|
||||
|
||||
|
||||
_context.sessionKeyManager().tagsDelivered(pubKey, curKey, firstTags);
|
||||
TagSetHandle tsh = _context.sessionKeyManager().tagsDelivered(pubKey, curKey, firstTags);
|
||||
_context.sessionKeyManager().tagsAcked(pubKey, curKey, tsh);
|
||||
|
||||
curKey = _context.sessionKeyManager().getCurrentKey(pubKey);
|
||||
SessionTag curTag = _context.sessionKeyManager().consumeNextAvailableTag(pubKey, curKey);
|
||||
@@ -226,7 +229,8 @@ public class SessionEncryptionTest extends TestCase{
|
||||
|
||||
|
||||
|
||||
_context.sessionKeyManager().tagsDelivered(pubKey, nextKey, secondTags); // note nextKey not curKey
|
||||
tsh = _context.sessionKeyManager().tagsDelivered(pubKey, nextKey, secondTags); // note nextKey not curKey
|
||||
_context.sessionKeyManager().tagsAcked(pubKey, nextKey, tsh);
|
||||
|
||||
curKey = _context.sessionKeyManager().getCurrentKey(pubKey);
|
||||
curTag = _context.sessionKeyManager().consumeNextAvailableTag(pubKey, curKey);
|
||||
@@ -288,9 +292,11 @@ public class SessionEncryptionTest extends TestCase{
|
||||
|
||||
if ( (tags != null) && (tags.size() > 0) ) {
|
||||
if (nextKey == null) {
|
||||
_context.sessionKeyManager().tagsDelivered(pubKey, curKey, tags);
|
||||
TagSetHandle tsh = _context.sessionKeyManager().tagsDelivered(pubKey, curKey, tags);
|
||||
_context.sessionKeyManager().tagsAcked(pubKey, curKey, tsh);
|
||||
} else {
|
||||
_context.sessionKeyManager().tagsDelivered(pubKey, nextKey, tags);
|
||||
TagSetHandle tsh = _context.sessionKeyManager().tagsDelivered(pubKey, nextKey, tags);
|
||||
_context.sessionKeyManager().tagsAcked(pubKey, nextKey, tsh);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
40
history.txt
40
history.txt
@@ -1,3 +1,43 @@
|
||||
2011-02-13 zzz
|
||||
* Connect Client: Minor NPE fix cleanup
|
||||
* JobQueue: Prevet NPE at shutdown (thanks liberty)
|
||||
* GeoIP: Prevent startup NPE (ticket #413, thanks RN)
|
||||
* NetDB: Prevent ExpireLeaseJob NPE (thanks sponge)
|
||||
|
||||
2011-02-11 Mathiasdm
|
||||
* routerconsole: fixed graphs using jrobin; and headless issue
|
||||
in general: no more switches between headless and non-headless.
|
||||
|
||||
2011-02-11 sponge
|
||||
* I2PTunnel: fix NPE in I2PTunnelConnectClient
|
||||
|
||||
2011-02-10 sponge
|
||||
* I2CP: fix NPE in QueuedClientConnectionRunner
|
||||
|
||||
2011-02-10 zzz
|
||||
* 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)
|
||||
* i2psnark:
|
||||
- Improved magnet link parsing, use tr parameter if present
|
||||
* i2ptunnel: Change shared clients default for new clients to false
|
||||
* Streaming: Don't use iter.remove() on a COWAS
|
||||
|
||||
2011-02-09 sponge
|
||||
* BOB: fixup delivery in config, adds config file versioning.
|
||||
* I2CP: Fix most of the I2CP leaks. Two leaks remain, but they are small.
|
||||
net.i2p.internal.QueuedI2CPMessageReader and
|
||||
net.i2p.router.client.I2CPMessageQueueImpl
|
||||
are the two remaining leaks.
|
||||
|
||||
2011-02-07 zzz
|
||||
* i2psnark:
|
||||
- Check for dup magnet torrent when adding torrent file
|
||||
- Add exotrack.i2p (ticket #403)
|
||||
- Disable spellcheck in textarea
|
||||
* i2ptunnel: Generate error message when i2ptunnel.config save fails
|
||||
(ticket #404)
|
||||
|
||||
2011-02-06 zzz
|
||||
* i2psnark: Fix maggot links, and magnet links with trailing parameters (thx user)
|
||||
|
||||
|
||||
@@ -325,3 +325,4 @@ i2plugins.i2p=7oQz2gHOxFXxXTI6uGMk1Giv9UmviBhbubWKDjDqW1Rxvmm55tvC1znaAAZoV0X6YP
|
||||
i2pbote.i2p=~taSfBfeiMM5fW~qwUGZr4kAXmSoentWVjlQhTCKWhVj04KV34tLguNQEpHb1cA2eIwlkTpY0TPYUVKt866jLgQEteuIImmNuStVgm6DWh4baPqI22oSNC7O-4EW6PJy1tT9nr1NXu5p4w2jY4P4Css76xthaf6Z5YUOWAIwnMlptyac-qFHmjmU3CFqvKQgBnA4NB0ts7Y2~TcvciANllfsjfsMgFdg--FYpKiwC8bSsTHKJ3~oGb6osMqql~Vzr6kvIzfLnvabbuW8wjG2JvATBuJ3IY-BN59KdT84nc00SuMgmt1ywVvHOl0~n8Cjr1hASYiJ2FTxEQRbQ9WRaxbnk5BO~yeiedCsjw7ImsSES3GzcU5zVVx9p3bgx7P~X0h52VripL6bovj9YJznN3qw0eRCJGjY-du8azFNV6~6ZZ6ss14RNC~HKIzlhR7F5kF~4H2wfC1EdNlmm1cI0iYRdEdwSSVX47LngHyK-ZQbVZOGeEeCU8J8Vhk~8WdLAAAA
|
||||
planet.i2p=W0omtMApOdlTkgJoct08QnzDkeb~xc60df5Cx3k3qqOFmyEkRB65NdpSdvldI5STmXmXlZe68f8Hu1dfBMmKvfpBFMpP-mRVYuHbEa4N1dRkp3AOswZFO51lSC~MVPMZKGHAv0cfv5WFaJ9nfuaR7iYYWJF11xotoPTMbJdB-I3XPC8rxHI-73ATlOD4cU9oZ6BYcBE0dun9zw4IHBcRpnFRx~s-TkevNfPnBqujB-NNgA8a5s~QUj0h3FwwUWsNB8f1Uwy~DwoQh7pMp6dsZ3umEyBn2HaXZasSmbzB30qkQRs9vrAtIFdIzCQ~8gI2cHdHEPgExUQX~xlM8QZEgnLXSfS93asWPdpitv~KT7bO-35BgTBdCozHTCcvys6bYJ24UnkFVBE0D2L0t98neelWkJSaEU0QzxdRphoCZY8OABQIaS4qw6PEFD1Un1vxNCh~TDFWcYBZ3Rqsc~ISW0wF7oOS6-DPT3q5O8cGLc8iAEdRchrU9XyAHAKVlEZxAAAA
|
||||
outproxy2.h2ik.i2p=zjXqVu1pnPpsR0DnqiIlAidy8GSLznEupTrb~vUg-NELU3~Gmbqc-soJlYu69VyQdZxVGNZ1PsgacjJwxtd8otZ~lgqsJV2aDJdzDIClEj9hYM4hV4ClHdZQnEOEHj1fc5TK7n31o3jr94kz6ZtdG9eL7F~YIE7EcADJ7ECg-wz05~xj8NK4gH67mMSCHgX92RTQRTGFtxxrPkVRLD8GE069wGmRpV9xt3wZqn12ijdo1HjNMbqxZfSbulscm0M2~qy4fwzF1OYWSg5-~NY02iNygwKYhG2CdgDyFALVGvHfJ-wzZ~pKj62-c8HVg1qHE6B1bKKO5GID03JoRAlEeZFkrqqmUQyQvzxhlUJlcnaBOaCoIm9L8999cHQj7-JHJTTvJ2TltvSbj1TcyoIFEdSyW22TJGRMoopezPoCERhemy79cb~SvsK46m4J7hBDjQl7Rgzp-uC5aSMEN3PU2g1w5A3DWxodUy2Zzg~moJaKbeS8Vf~mLVEt63djlFMxAAAA
|
||||
exotrack.i2p=Ly1vs4plBuGisqlMiQOjhVkXFZPBMy9joSCrus~tuLXBRXDrPYG9WXJMzY4gb3LiW0VVawv0kLgikX8eeeruXmgKwQW5zB9UPSP0CQnXTRelE3Jn7lev~re4woHvgS-EGBwWikxqXF3f7W8-LhieI0JhBZxItiWhJJME07oncW0kgS8UIMl0wqN2Y-p0sryFCN056TfGNTXigfxrSLqKnpi6a2OyEkF62qvRID3qXzRque0vKQjqvavq2mqxjFrSgLUoyKod5h9Px6qK08gtoAyDKMLPk7fPgReYKj6awiOxRSGfsMpZD3~ZuV0Sts2XtCau3S3myYMIDe5oKziPtZRIej4KBDxT0YYIw5v4RoqzqF88gNgHDfkPZ25JKTOt5xGcPTG8kwYrtx39PX6NrJmv-I~LUz6sZZlIW24k1qbO7zBxZ6mazldQY1~FJGXzn5MNzsxp44iOZdMDJJh18N0Psthk2hqlQOS4L0Ss1Odm1czhBxf1Y~j3L-QsMttcAAAA
|
||||
|
||||
@@ -89,7 +89,7 @@ If you're behind a prohibitive firewall but have unrestricted outbound access, I
|
||||
make sure your browser's proxy is set to access http traffic (<i>not</i> https, <i>not</i> socks) via <code>127.0.0.1 port 4444</code>. If you need some help, there's <a href="http://www.i2p2.i2p/htproxyports.html" target="_blank">a guide</a> to configuring your browser for I2P use, also <a href="http://www.i2p2.de/htproxyports.html" target="_blank">available</a> on the normal web. </li>
|
||||
|
||||
<li class="tidylist"><b>Check Your Logs</b><br><a href="/logs">Logs</a> may help resolve a problem. You may wish to paste excerpts in a <a href="http://forum.i2p/viewforum.php?f=10" target="_blank">forum</a> for help, or perhaps <a href="http://paste.i2p2.i2p/" target="_blank">paste</a> it instead and reference the link on IRC for help.</li>
|
||||
<li class="tidylist"><b>Verify Java is Up to Date</b><br>Ensure your Java is up to date [version 1.6 recommended and required for some features]. If you don't have Java installed, you probably want some implementation of the JRE (<a href="https://secure.wikimedia.org/wikipedia/en/wiki/JRE" target="_blank">Java Runtime Engine</a>); if you're a developer, the <a href="https://secure.wikimedia.org/wikipedia/en/wiki/Java_SDK" target="_blank">SDK</a> may also be of interest, and possibly <a href="http://ant.apache.org/" target="_blank">Apache Ant</a> which we use to build the I2P Java binaries.
|
||||
<li class="tidylist"><b>Verify Java is Up to Date</b><br>Ensure your Java is up to date [version 1.6 recommended and required for some features]. If you don't have Java installed, you probably want some implementation of the JRE (<a href="https://secure.wikimedia.org/wikipedia/en/wiki/JRE" target="_blank">Java Runtime Environment</a>); if you're a developer, the <a href="https://secure.wikimedia.org/wikipedia/en/wiki/Java_SDK" target="_blank">SDK</a> may also be of interest, and possibly <a href="http://ant.apache.org/" target="_blank">Apache Ant</a> which we use to build the I2P Java binaries.
|
||||
</li>
|
||||
|
||||
<li class="tidylist"><b>Problems running on Legacy Hardware</b><br>[Linux/Unix/Solaris] If you can't start the router with <code>i2p/i2prouter start</code> try the <code>runplain.sh</code> script in the same directory. Root privileges are usually not required to run I2P. If you need to compile the <a href="http://www.i2p2.i2p/jbigi.html" target="_blank">jBigi library</a> (which is necessary in rare cases), consult appropriate documentation, visit the forums, or come pay a visit to our <a href="irc://127.0.0.1:6668/i2p-dev">IRC developer channel</a>.
|
||||
|
||||
@@ -227,10 +227,14 @@ public class JobQueue {
|
||||
}
|
||||
|
||||
public long getMaxLag() {
|
||||
// first job is the one that has been waiting the longest
|
||||
Job j = _readyJobs.peek();
|
||||
if (j == null) return 0;
|
||||
// first job is the one that has been waiting the longest
|
||||
long startAfter = j.getTiming().getStartAfter();
|
||||
JobTiming jt = j.getTiming();
|
||||
// PoisonJob timing is null, prevent NPE at shutdown
|
||||
if (jt == null)
|
||||
return 0;
|
||||
long startAfter = jt.getStartAfter();
|
||||
return _context.clock().now() - startAfter;
|
||||
}
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ import java.util.Properties;
|
||||
|
||||
import net.i2p.I2PAppContext;
|
||||
import net.i2p.data.Hash;
|
||||
import net.i2p.data.RouterInfo;
|
||||
import net.i2p.internal.InternalClientManager;
|
||||
import net.i2p.router.client.ClientManagerFacadeImpl;
|
||||
import net.i2p.router.networkdb.kademlia.FloodfillNetworkDatabaseFacade;
|
||||
@@ -170,8 +171,20 @@ public class RouterContext extends I2PAppContext {
|
||||
|
||||
/** what router is this context working for? */
|
||||
public Router router() { return _router; }
|
||||
/** convenience method for querying the router's ident */
|
||||
public Hash routerHash() { return _router.getRouterInfo().getIdentity().getHash(); }
|
||||
|
||||
/**
|
||||
* Convenience method for getting the router hash.
|
||||
* Equivalent to context.router().getRouterInfo().getIdentity().getHash()
|
||||
* @return may be null if called very early
|
||||
*/
|
||||
public Hash routerHash() {
|
||||
if (_router == null)
|
||||
return null;
|
||||
RouterInfo ri = _router.getRouterInfo();
|
||||
if (ri == null)
|
||||
return null;
|
||||
return ri.getIdentity().getHash();
|
||||
}
|
||||
|
||||
/**
|
||||
* How are we coordinating clients for the router?
|
||||
|
||||
@@ -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 = 4;
|
||||
public final static long BUILD = 10;
|
||||
|
||||
/** for example "-test" */
|
||||
public final static String EXTRA = "";
|
||||
|
||||
@@ -46,6 +46,7 @@ class QueuedClientConnectionRunner extends ClientConnectionRunner {
|
||||
void stopRunning() {
|
||||
super.stopRunning();
|
||||
queue.close();
|
||||
// queue = null;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -9,7 +9,7 @@ package net.i2p.router.networkdb.kademlia;
|
||||
*/
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import net.i2p.data.DatabaseEntry;
|
||||
@@ -27,8 +27,8 @@ import net.i2p.util.Log;
|
||||
*
|
||||
*/
|
||||
class ExpireLeasesJob extends JobImpl {
|
||||
private Log _log;
|
||||
private KademliaNetworkDatabaseFacade _facade;
|
||||
private final Log _log;
|
||||
private final KademliaNetworkDatabaseFacade _facade;
|
||||
|
||||
private final static long RERUN_DELAY_MS = 1*60*1000;
|
||||
|
||||
@@ -39,11 +39,11 @@ class ExpireLeasesJob extends JobImpl {
|
||||
}
|
||||
|
||||
public String getName() { return "Expire Lease Sets Job"; }
|
||||
|
||||
public void runJob() {
|
||||
Set toExpire = selectKeysToExpire();
|
||||
Set<Hash> toExpire = selectKeysToExpire();
|
||||
_log.info("Leases to expire: " + toExpire);
|
||||
for (Iterator iter = toExpire.iterator(); iter.hasNext(); ) {
|
||||
Hash key = (Hash)iter.next();
|
||||
for (Hash key : toExpire) {
|
||||
_facade.fail(key);
|
||||
//_log.info("Lease " + key + " is expiring, so lets look for it again", new Exception("Expire and search"));
|
||||
//_facade.lookupLeaseSet(key, null, null, RERUN_DELAY_MS);
|
||||
@@ -57,17 +57,15 @@ class ExpireLeasesJob extends JobImpl {
|
||||
* don't have any leases that haven't yet passed, even with the CLOCK_FUDGE_FACTOR)
|
||||
*
|
||||
*/
|
||||
private Set selectKeysToExpire() {
|
||||
Set keys = _facade.getDataStore().getKeys();
|
||||
Set toExpire = new HashSet(128);
|
||||
for (Iterator iter = keys.iterator(); iter.hasNext(); ) {
|
||||
Hash key = (Hash)iter.next();
|
||||
DatabaseEntry obj = _facade.getDataStore().get(key);
|
||||
private Set<Hash> selectKeysToExpire() {
|
||||
Set<Hash> toExpire = new HashSet(128);
|
||||
for (Map.Entry<Hash, DatabaseEntry> entry : _facade.getDataStore().getMapEntries()) {
|
||||
DatabaseEntry obj = entry.getValue();
|
||||
if (obj.getType() == DatabaseEntry.KEY_TYPE_LEASESET) {
|
||||
LeaseSet ls = (LeaseSet)obj;
|
||||
if (!ls.isCurrent(Router.CLOCK_FUDGE_FACTOR))
|
||||
toExpire.add(key);
|
||||
else
|
||||
toExpire.add(entry.getKey());
|
||||
else if (_log.shouldLog(Log.DEBUG))
|
||||
_log.debug("Lease " + ls.getDestination().calculateHash() + " is current, no need to expire");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,7 +9,6 @@ package net.i2p.router.networkdb.kademlia;
|
||||
*/
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
import java.util.Set;
|
||||
|
||||
import net.i2p.data.Hash;
|
||||
@@ -28,8 +27,8 @@ import net.i2p.util.Log;
|
||||
*
|
||||
*/
|
||||
class ExpireRoutersJob extends JobImpl {
|
||||
private Log _log;
|
||||
private KademliaNetworkDatabaseFacade _facade;
|
||||
private final Log _log;
|
||||
private final KademliaNetworkDatabaseFacade _facade;
|
||||
|
||||
/** rerun fairly often, so the fails don't queue up too many netdb searches at once */
|
||||
private final static long RERUN_DELAY_MS = 120*1000;
|
||||
@@ -41,11 +40,13 @@ class ExpireRoutersJob extends JobImpl {
|
||||
}
|
||||
|
||||
public String getName() { return "Expire Routers Job"; }
|
||||
|
||||
public void runJob() {
|
||||
Set toExpire = selectKeysToExpire();
|
||||
_log.info("Routers to expire (drop and try to refetch): " + toExpire);
|
||||
for (Iterator iter = toExpire.iterator(); iter.hasNext(); ) {
|
||||
Hash key = (Hash)iter.next();
|
||||
// this always returns an empty set (see below)
|
||||
Set<Hash> toExpire = selectKeysToExpire();
|
||||
if (_log.shouldLog(Log.INFO))
|
||||
_log.info("Routers to expire (drop and try to refetch): " + toExpire);
|
||||
for (Hash key : toExpire) {
|
||||
_facade.fail(key);
|
||||
}
|
||||
_facade.queueForExploration(toExpire);
|
||||
@@ -61,9 +62,8 @@ class ExpireRoutersJob extends JobImpl {
|
||||
*
|
||||
* @return nothing for now
|
||||
*/
|
||||
private Set selectKeysToExpire() {
|
||||
for (Iterator iter = _facade.getAllRouters().iterator(); iter.hasNext(); ) {
|
||||
Hash key = (Hash)iter.next();
|
||||
private Set<Hash> selectKeysToExpire() {
|
||||
for (Hash key : _facade.getAllRouters()) {
|
||||
// Don't expire anybody we are connected to
|
||||
if (!getContext().commSystem().isEstablished(key)) {
|
||||
// This does a _facade.validate() and fail() which is sufficient...
|
||||
|
||||
@@ -16,6 +16,7 @@ import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
import net.i2p.data.DataHelper;
|
||||
import net.i2p.data.Hash;
|
||||
import net.i2p.router.RouterContext;
|
||||
import net.i2p.util.ConcurrentHashSet;
|
||||
import net.i2p.util.Log;
|
||||
@@ -251,7 +252,11 @@ class GeoIP {
|
||||
*/
|
||||
private void updateOurCountry() {
|
||||
String oldCountry = _context.router().getConfigSetting(PROP_IP_COUNTRY);
|
||||
String country = _context.commSystem().getCountry(_context.routerHash());
|
||||
Hash ourHash = _context.routerHash();
|
||||
// we should always have a RouterInfo by now, but we had one report of an NPE here
|
||||
if (ourHash == null)
|
||||
return;
|
||||
String country = _context.commSystem().getCountry(ourHash);
|
||||
if (country != null && !country.equals(oldCountry)) {
|
||||
_context.router().setConfigSetting(PROP_IP_COUNTRY, country);
|
||||
_context.router().saveConfig();
|
||||
|
||||
Reference in New Issue
Block a user